2011-06-17 68 views
3

我的問題是,按照以下過程進行合併時,是「將分支摺疊回主幹」過程的最後一步,請執行此操作的正確方法最佳實踐方案?需要關於使用分支和合並回主幹的幫助/建議

我已經使用svn很多年了。在我個人的項目中,我總是樂於在沒有第二思路的情況下快速開始幹活,並且以單線性的方式進行版本控制已經接近完美。簡單而高效。所有的幸福,,直到我想更多地控制第三方庫

今天,我正在進行一個項目,我覺得它已經超越了黑客直接幹線的方法。我有多個第三方庫,每週更新一次,我真的需要更多的控制權。我需要能夠查看第三方lib版本和特定庫的跟蹤更改之間的特定變更集。我曾經看到過幾次代碼庫變得非常混亂,並且很難用缺乏經驗的buildmaster重新回到可行的狀態,但我無法在這裏出錯。

因此,我看着供應商分支,閱讀一些文章在這裏和那裏。我有'Subversion版本控制'這本書,但是我看到的例子在他們的方法中有時是矛盾的,我想說明'分支'的含義。我正要按照approach given on this post by Evan Weaver

我制定了以下程序,我關心的是最後一節「將分支摺疊成幹線」。似乎我過去一直在使用的buildmasters通常會將分支變更集合到主幹上,而我認爲分支甚至不會被刪除。這是一個合適的方法嗎?

創建分公司

1 - 請注意當前的頭部修訂:

svn info svn://server.com/svn/repository/trunk | grep Revision 

2 - 使後備箱的整潔,遠程複製到分支文件夾。命名它。我們叫它your_branch,帶有修訂版本號替換HEAD_REVISION您在步驟1指出:

svn cp svn://server.com/svn/repository/trunk \ 
svn://server.com/svn/repository/branches/your_branch \ 
-m "Branching from trunk to your_branch at HEAD_REVISION" 

3 - 切換本地結帳指向新的分支(這不會覆蓋您的更改):

svn switch --relocate \ 
svn://server.com/svn/repository/trunk \ 
svn://server.com/svn/repository/branches/your_branch 

4 - 檢查你的本地結帳,絕對是現在your_branch,並且您可以更新OK:

svn info | grep URL 
svn up 

5 - 如果有必要提交您的新變化。

更新分支

你一直在開發上your_branch一段時間,等有其他人幹,現在你必須添加自己的更改your_branch。

1 - 首先,更新您的分支結賬並提交任何未完成的更改。

2 - 搜索Subversion日誌以查看上次合併的修訂版本號(或原始分支的創建時間,如果您從未合併)。這是一次成功的合併關鍵:

svn log --limit 500 | grep -B 3 your_branch 

3 - 還要注意當前最新修訂版:

svn info svn://server.com/svn/repository/trunk | grep Revision 

4 - 合併最後合併版本的主幹和差異對行李箱的最新修訂版L -

svn merge -r LAST_MERGED_REVISION:HEAD_REVISION \ 
    svn://server.com/svn/repository/trunk . 

5.A:進your_branch工作拷貝,用修訂號替換LAST_MERGED_REVISION在步驟2和HEAD_REVISION與修訂號指出在步驟3中記ook輸出中的錯誤。可以找到所有文件嗎?有沒有被刪除的東西?也許你做錯了。如果需要恢復,運行svn revert -R

5.B - 如果事情似乎5.A OK,檢查是否存在衝突,解決任何衝突發現:

svn status | egrep '^C|^.C' 

6 - 提交合並,更換命令與來自步驟4:

svn ci -m "Merged changes from trunk to your_branch: COMMAND"  

摺疊分支回主幹的確切命令內容

嘿,Y our_branch完成。現在它必須成爲後備箱。

1 - 首先,按照上一節(「更新分支」)中的每一步操作,使your_branch與主幹上的任何最近更改同步。

2 - 完全刪除主幹:

svn del svn://server.com/svn/repository/trunk 

3 - 移動your_branch到老樹幹位置:

svn mv svn://server.com/svn/repository/branches/your_branch \ 
svn://server.com/svn/repository/trunk 

4 - 重新定位你的工作拷貝到主幹:

svn switch --relocate \ 
svn://server.com/svn/repository/branches/your_branch \ 
svn://server.com/svn/repository/trunk 

完成!

請對此程序提供任何建議,意見或反饋意見。

回答

1

SVN切換--relocate \ 的svn://server.com/svn/repository/trunk \ 的svn://server.com/svn/repository/branches/your_branch

- -relocate選項是切換到另一個回購。新分支是主幹的副本,所以切換。

只要做到:

svn switch ^/branches/your_branch 

SVN信息| grep URL svn up

大多數情況下這個更新什麼都不會做。

SVN合併-r LAST_MERGED_REVISION:HEAD_REVISION \ SVN://server.com/svn/repository/trunk。

大部分時間我使用TortoiseSVN,而只是一門心思時間:

svn merge ^/trunk . 

嘗試,如果這會工作,它應該。關於合併跟蹤,較新的SVN使用merge-info屬性,因此大多數時候它應該知道要合併的內容。它有問題你的方法應該很好。

  • ^/是repozitory相對url。
  • SVN信息^ /嘗試,如果它是可用在您的SVN版本(你應該在SVN文件夾)

與刪除分支部分讓我害怕......

嘗試:

#注意你的分支應該是最新的(解決分支上的大部分衝突) svn switch ^/trunk svn merge --reintegrate ^/branches/your_branch。

化解矛盾;)

使用svn commit -m 「重返your_branch」 SVN刪除^ /分支機構/ your_branch

大部分是較好的去除這個分支,如果你不知道如何的時候處理它(它不是那麼容易,所以更好的是刪除它並創建新的)。

此外,請注意更改您在其他分支/主幹中更改的名稱/重定位文件。這會導致你發生樹木衝突。如果其他分支沒有變化,請自由選擇。

2

如果您還沒有這樣做,我建議您閱讀branching + merging section here

您引用的帖子已過時(2007年8月)並且已過時。從Subversion 1.5(2008年6月)開始,合併跟蹤功能已經得到了很大的改進(您可以創建分支並執行合併,而顛覆實際上會跟蹤哪些修訂已經從主幹中合併到您中)。在顛覆1.6(2009年3月)中,這一點已經得到進一步改善。

我特別討厭建議

2 - 刪除主幹完全

SVN德爾的svn://服務器。com/svn/repository/trunk

作爲管理trunk的一種方式。這看起來似乎有點容易出錯(如果兩個功能分支想要同時合併,會發生什麼情況)。我傾向於分享most recent comment on the post的觀點。

相反,您可以在準備好時執行「重新合併」合併以將分支合併回主幹。這將您的分支中的相關變更集應用到中繼。