文章出處

在使用源代碼版本控制工具時,最佳實踐是一直保持一個主干版本。但是為了應付實際開發中的各種情況,適時的開辟一些分支也是很有必要的。比如在持續開發新功能的同時,需要發布一個新版本,那么就需要從開發主干中建立一個用于發布的分支,在分支上進行bug fix,維護版本的穩定,并適時的將一些改動合并回主干。目前大紅大紫的源代碼版本控制工具git很受大家推崇,原因之一就是其在這方面的功能相當強大。其實老牌的SVN也是有這樣的功能的,接下來就給大家講解下。

Branch的創建

在SVN中主干代碼一般是放置在Trunk目錄下的,如果要新建Branch的話則放置在Branchs目錄下。(注意這是一種約定,SVN并不強制你這樣做)注意Branhs和Trunk目錄要平級,不能有嵌套,要不會引起混亂。

1
2
3
4
  myproject/
      trunk/
      branches/
      tags/

創建一個Branch也相當簡單,只需要一條命令即可。

1
svn copy http://example.com/repos/myproject/trunk http://example.com/repos/myproject/branches/releaseForAug -m 'create branch for release on August'

這條命令是指給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上,那么應該怎么做那?

  1. 保證當前Branch分支是clean的,也就是說使用svn status看不到任何的本地修改。

  2. 命令行下切換到Trunk目錄中,使用 svn merge http://example.com/repos/myproject/branches/releaseForAug 來將Branch分支上的改動merge回Trunk下。

  3. 如果出現merge沖突則進行解決,然后執行svn ci -m 'description'來提交變動。

當然在merge你也可以指定Branch上那些版本變更可以合并到Trunk中。

1
svn merge  http://example.com/repos/myproject/branches/releaseForAug -r150:HEAD

示例中是將Branch的從版本150到當前版本的所有改動都合并到Trunk中。

你也可以將Trunk中的某些更新合并到Branch中,還是同樣的方法。

查看當前Branch和Trunk的合并情況

可以使用svn mergeinfo來查看merge情況。

查看當前Branch中已經有那些改動已經被合并到Trunk中:

1
2
# cd to trunk directory
svn mergeinfo http://example.com/repos/myproject/branches/releaseForAug

查看Branch中那些改動還未合并。

1
2
3
#cd to trunk directory

svn merginfo http://example.com/repos/myproject/branches/releaseForAug --show-revs eligible

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()