SVN中Branch的建立與合併

2021-09-06 11:34:38 字數 1938 閱讀 7242

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

在svn中主幹**一般是放置在trunk目錄下的,如果要新建branch的話則放置在branchs目錄下。(注意這是一種約定,svn並不強制你這樣做)注意branhs和trunk目錄要平級,不能有巢狀,要不會引起混亂。

123

4

myproject/

trunk/

branches/

tags/

建立乙個branch也相當簡單,只需要一條命令即可。

1

svn copy   -m 'create branch for release on august'

這條命令是指給myproject這個repo建立乙個名為releaseforaug的branch,使用-m來加入描述。

之後你就可以通過svn checkout來遷出你的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來將branch分支上的改動merge回trunk下。

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

當然在merge你也可以指定branch上那些版本變更可以合併到trunk中。

1

svn merge   -r150:head

示例中是將branch的從版本150到當前版本的所有改動都合併到trunk中。

你也可以將trunk中的某些更新合併到branch中,還是同樣的方法。

可以使用svn mergeinfo來檢視merge情況。

檢視當前branch中已經有那些改動已經被合併到trunk中:

1

2

# cd to trunk directory

svn mergeinfo

檢視branch中那些改動還未合併。

1

23

#cd to trunk directory

svn merginfo --show-revs eligible

SVN中Branch的建立與合併

在使用源 版本控制工具時,最佳實踐是一直保持乙個主幹版本。但是為了應付實際開發中的各種情況,適時的開闢一些分支也是很有必要的。比如在持續開發新功能的同時,需要發布乙個新版本,那麼就需要從開發主幹中建立乙個用於發布的分支,在分支上進行bug fix,維護版本的穩定,並適時的將一些改動合併回主幹。目前大...

SVN中tag和branch的區別

在svn中branch tag在乙個功能選項中,在使用中也往往產生混淆。在實現上,branch和tag,對於svn都是使用copy實現的,所以他們在預設的許可權上和一般的目錄沒有區別 至於何時用tag,何時用branch,完全由人主觀的根據規範和需要來選擇,而不是強制的 比如cvs 一般情況下,ta...

如何用好SVN的Branch

在svn裡面我們一般會建立出三個資料夾 trunk 主幹 branch 分支 tag 標籤 在我們專案一開始的時候我們會將 檔案 這邊暫時不涉及文件的管理 放在trunk底下。然後我們就不斷的開始工作了。什麼時候我們會用到branch。按我的經驗的話我們用到branch有兩種情況 專案穩定了要rel...