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

