在使用源**版本控制工具時,最佳實踐是一直保持乙個主幹版本。但是為了應付實際開發中的各種情況,適時的開闢一些分支也是很有必要的。比如在持續開發新功能的同時,需要發布乙個新版本,那麼就需要從開發主幹中建立乙個用於發布的分支,在分支上進行bug fix,維護版本的穩定,並適時的將一些改動合併回主幹。目前大紅大紫的源**版本控制工具git很受大家推崇,原因之一就是其在這方面的功能相當強大。其實老牌的svn也是有這樣的功能的,接下來就給大家講解下。
在svn中主幹**一般是放置在trunk目錄下的,如果要新建branch的話則放置在branchs目錄下。(注意這是一種約定,svn並不強制你這樣做)注意branhs和trunk目錄要平級,不能有巢狀,要不會引起混亂。
1234
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中:
12
# cd to trunk directory
svn mergeinfo
檢視branch中那些改動還未合併。
123
#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...