1. 程式人生 > >【SVN】SVN的trunk、branches、tag的使用以及分支的概念

【SVN】SVN的trunk、branches、tag的使用以及分支的概念

upd 客戶端 code clas 通過 chan verbose 目錄結構 本質

svn的存儲結構一般建議在根目錄下建立trunk、branches、tags這三個文件夾,trunk用於平時的正常工作,branches用於存放各種分支,tags用於存放各種發布版本或某狀態的快照

tags本質上和branches是一樣的,都是一種分支,只是習慣上branches下面的東西會被修改、合並,而tags下面的東西則作為某階段的狀態保存不動

一般tags下面經常放的都是各個發布版本,如Release0.91、Release1.23等

1首先明白我們采用命令行的方式在服務器上創建的倉庫是沒有trunk、branches、tags目錄的。

在建立項目版本庫時,可首先建好項目文件夾,並在其中建立trunk, branches, tags三個空的子目錄。這樣在trunk中開始進行開發

trunk是主分支,是日常開發進行的地方。

branches是分支。一些階段性的release版本,這些版本是可以繼續進行開發和維護的,則放在branches目錄中。又比如為不同用戶客制化的版本,也可以放在分支中進行開發。

tags目錄一般是只讀的,這裏存儲階段性的發布版本,只是作為一個裏程碑的版本進行存檔。

2.從創建一個服務器倉庫開始建立分支

1.服務器端創建一個倉庫

[root@VM_0_12_centos repository]# svnadmin create ./danger  #創建倉庫
[root@VM_0_12_centos repository]# 
ls ./danger/        #查看目錄結構 conf db format hooks locks README.txt

2.服務器端修改配置文件,配置賬戶密碼以及權限(修改conf目錄下的三個文件:)

authz:負責賬號權限的管理,控制賬號是否讀寫權限

passwd:負責賬號和密碼的用戶名單管理

svnserve.conf:svn服務器配置文件

authz文件在最後添加用戶的權限,r代表讀權限,w代表寫權限:

技術分享圖片

passwd文件中追加賬號和密碼,如下

技術分享圖片

賬號密碼文件無需做修改,也是直接將賬號和密碼信息追加到文件中即可,註意格式為:

賬號 = 密碼

例如:admin = 123456

修改svnserve.conf(重要),只需要放開下面四處的註釋即可。

技術分享圖片

3.客戶端檢出倉庫並且創建trunk、tags、branches目錄:

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject
$ svn co svn://qiaoliqiang.cn:3690/danger  #檢出項目,等價於svn checkout url
Checked out revision 0.

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject
$ ls
danger/

創建三個目錄並且提交到SVN服務器:

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject
$ cd danger/

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ ls

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ mkdir trunk branches tags      #創建三個目錄

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ ls
branches/  tags/  trunk/

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn add *      #添加到索引庫
A         branches
A         tags
A         trunk

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "add 3 dirs"  #提交到遠程倉庫,等價於svn commit -m "xxx"
Adding         branches
Adding         tags
Adding         trunk

Committed revision 1.

4.我們進入trunk目錄模擬在trunk正常開發並且提交到服務器:

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn diff      #查看修改的不同
Index: trunk/myProject/test.txt
===================================================================
--- trunk/myProject/test.txt    (revision 0)
+++ trunk/myProject/test.txt    (working copy)
@@ -0,0 +1 @@
+111

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "add a file"      #提交到服務器
Adding         trunk\myProject
Adding         trunk\myProject\test.txt
Transmitting file data .
Committed revision 2.

5.我們創建一個分支並且切換到新分支:

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn cp svn://qiaoliqiang.cn:3690/danger/trunk svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch -m "add qlqbranch"  #創建分支

Committed revision 3.

svn cp 等價於 svn copy

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch
svn: E195012: Path . does not share common version control ancestry with the requested switch location.  Use --ignore-ancestry to disable this check.
svn: E195012: svn://qiaoliqiang.cn/danger/branches/qlqbranch shares no common ancestry with C:\Users\Administrator\Desktop\svnproject\danger

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch  --ignore-ancestry  #切換分支到qlqbranch
D    tags
D    trunk
D    branches
A    myProject
A    myProject\test.txt
Updated to revision 3.

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ ls
myProject/

當然我們可以切換到主幹分支

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk  --ignore-ancestry    #回到主幹分支

我們可以通過svn info查看我們目前處於哪個分支

$ svn info    #根據url判斷目前處於哪個分支
Path: .
Working Copy Root Path: C:\Users\Administrator\Desktop\svnproject\danger
URL: svn://qiaoliqiang.cn/danger/branches/qlqbranch  
Relative URL: ^/branches/qlqbranch
Repository Root: svn://qiaoliqiang.cn/danger
Repository UUID: 5fd66061-fba7-44bc-bfef-b078c6e4d2c6
Revision: 4
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev: 4
Last Changed Date: 2018-07-19 16:03:42 +0800 (????, 19 7?? 2018)

6.在新建的分支修改文件

新建的分支修改文件並且提交

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn diff
Index: myProject/test.txt
===================================================================
--- myProject/test.txt  (revision 3)
+++ myProject/test.txt  (working copy)
@@ -1 +1,7 @@
 111
+111
+111
+111
+111
+111
+111

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "qlqbranch modify test.txt"
Sending        myProject\test.txt
Transmitting file data .
Committed revision 4.

切換到主分支查看文件是否是修改之前的文件:

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk  --ignore-ancestry  #切換到主幹分支
U    myProject\test.txt
Updated to revision 4.

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ cat ./myProject/test.txt      #讀取文件
111

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch  --ignore-ancestry  #切換到qlqbranch分支
U    myProject\test.txt
Updated to revision 4.

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger      #讀取文件
$ cat ./myProject/test.txt
111
111
111
111
111
111
111

7. 合並qlqbranch到主幹trunk分支

  • 切換到主幹分支並查看是否切換成功
Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk  --ignore-ancestry   #切換分支
At revision 4.

$ svn info  #唯一有用的是url,根據url判斷是否切換成功
Path: .
Working Copy Root Path: C:\Users\Administrator\Desktop\svnproject\danger
URL: svn://qiaoliqiang.cn/danger/trunk
Relative URL: ^/trunk
Repository Root: svn://qiaoliqiang.cn/danger
Repository UUID: 5fd66061-fba7-44bc-bfef-b078c6e4d2c6
Revision: 4
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev: 2
Last Changed Date: 2018-07-19 15:54:21 +0800 (????, 19 7?? 2018)

  • 查看創建分支時候的版本號(r3代表創建分支的時候版本號是3,所以合並的時候以3作為舊版本合並)
Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn log --verbose --stop-on-copy | tail -10
   M /branches/qlqbranch/myProject/test.txt

qlqbranch modify test.txt
------------------------------------------------------------------------
r3 | qiaolq | 2018-07-19 15:57:37 +0800 (????, 19 7?? 2018) | 1 line
Changed paths:
   A /branches/qlqbranch (from /trunk:2)

add qlqbranch

  • 合並qlqbranch分支到主幹分支
Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn merge -r 3:4 svn://qiaoliqiang.cn/danger/branches/qlqbranch   #合並分支,svn merge oldver:newver oldurl

8.發布一個tag(也是copy)

  • 發布tag
Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn copy svn://qiaoliqiang.cn:3690/danger/trunk svn://qiaoliqiang.cn:3690/danger/tags/release-1.0 -m "1.0released"

Committed revision 5.

  • 切換到tag查看
Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/tags/release-1.0  --ignore-ancestry   #切換分支到tag
U    myProject\test.txt
Updated to revision 5.

Administrator@MicroWin10-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn info      #查看版本以及信息
Path: .
Working Copy Root Path: C:\Users\Administrator\Desktop\svnproject\danger
URL: svn://qiaoliqiang.cn/danger/tags/release-1.0
Relative URL: ^/tags/release-1.0
Repository Root: svn://qiaoliqiang.cn/danger
Repository UUID: 5fd66061-fba7-44bc-bfef-b078c6e4d2c6
Revision: 5
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev: 5
Last Changed Date: 2018-07-19 16:38:49 +0800 (????, 19 7?? 2018)

【SVN】SVN的trunk、branches、tag的使用以及分支的概念