[size=small]
[b][color=red]需要注意的是branch和trunk使用同一套版本號,也就是說無論在branch還是trunk的提交都會引起主版本號的增加。這是因為svn copy只支援同乙個repository內的檔案copy,並不支援跨repository的copy,所以新建立的branch和trunk都屬於同乙個repository。 [/color][/b]
參考svn分支和合併的簡單例子
[url]
儘管svn沒有作強制要求,但是一般svn版本庫目錄建議建立trunk、branches和tags三個目錄。 在實際操作時,trunk主幹版本要時刻保持乾淨,即隨時可以基於這個版本進行修改並將應用部署上線。branches是分支目錄,存放並行開發的專案**,因為分支是主幹的廉價拷貝(相當只是提交了一次主幹版本,增加了乙個版本號,並沒有取出版本庫作映象拷貝),所以你可以放心建立很多分支版本。不過subversion不支援跨版本庫的拷貝,當使用svn copy時你只能在同乙個版本庫內操作。tags目錄存放trunk某個的快照,比如說release-1.0即trunk處於1.0版本時的快照。
使用svn來作團隊的**管理,那麼分支和合併將是非常常用的操作。下面是乙個簡單的示例。
1. 建立分支。這裡假設你要負責乙個叫theme的專案,分支號1.7.2。
#這裡的localhost是svn伺服器位址
svn copy -m "1.7.2 - theme" svn://localhost/www/trunk svn://localhost/www/branches/branch1.7.2-theme
svn co svn://localhost/www/branches/branch1.7.2-theme
2. 從trunk中merge到分支。忙了乙個星期終於開發完了,但是開發期間trunk版本有過改動,部署上線前你需要合併trunk的**。
#branch1.7.2-theme是分支目錄,注意不可以進到分支子目錄
cd branch1.7.2-theme
#前面的12972是開分支之前trunk的版本號,後面的12991是merge時trunk的版本號
svn merge -r 12972:12991 svn://localhost/www/trunk
如果有衝突選擇p(postpone),merge完了之後使用svn st|grep ^c檢視衝突檔案,然後比對修改衝突檔案。解決衝突後再check in ,資訊寫上執行的merge操作。
svn ci -m 'svn merge -r 12972:12991 svn://localhost/www/trunk'
3. 從分支merge到trunk。上線測試完畢,你很幸運,一切都如預期正常,這時就要將分支回歸trunk,將trunk更新到最新。
#先從trunk checkout乙份新鮮的**,然後cd到該版本目錄下
svn co svn://localhost/www/trunk
cd trunk
#12973是分支開始的版本號,13006是分支結束的版本號
svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme
如步驟2一樣解決衝突,解決衝突後再check in,資訊寫上執行的merge操作。
svn ci -m "svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme"
相關的手冊可以參閱svn文件。
svn中branch的建立與合併
[url]
在使用源**版本控制工具時,最佳實踐是一直保持乙個主幹版本。但是為了應付實際開發中的各種情況,適時的開闢一些分支也是很有必要的。比如在持續開發新功能的同時,需要發布乙個新版本,那麼就需要從開發主幹中建立乙個用於發布的分支,在分支上進行bug fix,維護版本的穩定,並適時的將一些改動合併回主幹。目前大紅大紫的源**版本控制工具git很受大家推崇,原因之一就是其在這方面的功能相當強大。其實老牌的svn也是有這樣的功能的,接下來就給大家講解下。
branch的建立
在svn中主幹**一般是放置在trunk目錄下的,如果要新建branch的話則放置在branchs目錄下。(注意這是一種約定,svn並不強制你這樣做)注意branhs和trunk目錄要平級,不能有巢狀,要不會引起混亂。
myproject/
trunk/
branches/
tags/
建立乙個branch也相當簡單,只需要一條命令即可。
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中。
svn merge -r150:head
示例中是將branch的從版本150到當前版本的所有改動都合併到trunk中。
你也可以將trunk中的某些更新合併到branch中,還是同樣的方法。
檢視當前branch和trunk的合併情況
可以使用svn mergeinfo來檢視merge情況。
檢視當前branch中已經有那些改動已經被合併到trunk中:
# cd to trunk directory
svn mergeinfo
檢視branch中那些改動還未合併。
#cd to trunk directory
svn merginfo --show-revs eligible
[/size]
SVN建立分支和合併主幹
建立分支 獲得分支 合併主幹上的最新 到分支上 如果需要預覽該重新整理操作,可以使用svn mergeinfo命令,如 或使用svn merge dry run選項以獲取更為詳盡的資訊。分支合併到主幹 一旦分支上的開發結束,分支上的 需要合併到主幹。svn中執行該操作需要在trunk的工作目錄下進行...
SVN分支和合併的簡單例子
參考資料 儘管svn沒有作強制要求,但是一般svn版本庫目錄建議建立trunk branches和tags三個目錄。在實際操作時,trunk主幹版本要時刻保持乾淨,即隨時可以基於這個版本進行修改並將應用部署上線。branches是分支目錄,存放並行開發的專案 因為分支是主幹的廉價拷貝 相當只是提交了...
SVN分支和合併的簡單例子
儘管svn沒有作強制要求,但是一般svn版本庫目錄建議建立trunk branches和tags三個目錄。在實際操作時,trunk主幹版本要時刻保持乾淨,即隨時可以基於這個版本進行修改並將應用部署上線。branches是分支目錄,存放並行開發的專案 因為分支是主幹的廉價拷貝 相當只是提交了一次主幹版...