【SVN】SVN的trunk、branches、tag的使用以及分支的概念
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的使用以及分支的概念