SVN分支和合併

2021-08-27 23:22:56 字數 3380 閱讀 2571

[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是分支目錄,存放並行開發的專案 因為分支是主幹的廉價拷貝 相當只是提交了一次主幹版...