在使用源代碼版本控制工具時,最佳實踐是一直保持一個主干版本。但是為了應付實際開發中的各種情況,適時的開辟一些分支也是很有必要的。比如在持續開發新功能的同時,需要發布一個新版本,那么就需要從開發主干中建立一個用于發布的分支,在分支上進行bug fix,維護版本的穩定,并適時的將一些改動合并回主干。目前大紅大紫的源代碼版本控制工具git很受大家推崇,原因之一就是其在這方面的功能相當強大。其實老牌的SVN也是有這樣的功能的,接下來就給大家講解下。
Branch的創建
在SVN中主干代碼一般是放置在Trunk目錄下的,如果要新建Branch的話則放置在Branchs目錄下。(注意這是一種約定,SVN并不強制你這樣做)注意Branhs和Trunk目錄要平級,不能有嵌套,要不會引起混亂。
1 2 3 4 |
|
創建一個Branch也相當簡單,只需要一條命令即可。
1
|
|
這條命令是指給myproject這個repo創建一個名為releaseForAug的branch,使用-m來加入描述。
之后你就可以通過 svn checkout http://example.com/repos/myproject/branches/releaseForAug
來遷出你的Branch源文件,在上面進行修改和提交了。
其實SVN并沒有Branch的內部概念。我們只是創建了一個repo的副本,并自己賦予這個副本作為Branch的意義,所以這與git中的Branch有很大不同。
需要注意的是Branch和Trunk使用同一套版本號,也就是說無論在Branch還是Trunk的提交都會引起主版本號的增加。這是因為svn copy
只支持同一個repository內的文件copy,并不支持跨repository的copy,所以新創建的Branch和Trunk都屬于同一個repository。
合并
既然要創建分支也需要合并分支。基本的合并也是蠻簡單的。
假設現在Branch上fix了一系列的bug,現在我們想把針對Branch的改變同步到Trunk上,那么應該怎么做那?
保證當前Branch分支是clean的,也就是說使用svn status看不到任何的本地修改。
命令行下切換到Trunk目錄中,使用
svn merge http://example.com/repos/myproject/branches/releaseForAug
來將Branch分支上的改動merge回Trunk下。如果出現merge沖突則進行解決,然后執行
svn ci -m 'description'
來提交變動。
當然在merge你也可以指定Branch上那些版本變更可以合并到Trunk中。
1
|
|
示例中是將Branch的從版本150到當前版本的所有改動都合并到Trunk中。
你也可以將Trunk中的某些更新合并到Branch中,還是同樣的方法。
查看當前Branch和Trunk的合并情況
可以使用svn mergeinfo
來查看merge情況。
查看當前Branch中已經有那些改動已經被合并到Trunk中:
1 2 |
|
查看Branch中那些改動還未合并。
1 2 3 |
|
文章列表