2009-05-19 27 views
10

我們有一個包含多個子項目的大型項目。我們即將發佈我們的項目,並且一個子項目中的新功能在發佈之前不會按原計劃完成。我想要做的是將與新功能相關的子項目的所有更改移動到單獨的分支中,以繼續爲下一個版本工作,但我不確定如何最好地完成此操作。顛覆 - 如何將一些變更集從主幹移動到分支?

的情況基本上是:

/proj/trunk/A/ 
/proj/trunk/B/ 
/proj/trunk/C/

我們有a到z檢查了自上次發佈的修訂。修訂d,f,g和j..n包含與C中的新功能相關的工作,這些功能不會及時完成。版本e,h和q在C中包含需要在此版本中發生的無關更改。我想創建一個/proj/branches/new-feature-for-C/,並在其中移動更改d,f,g和j..n,同時將e,h和q保留在主幹中。移至分支的更改與保留在主幹上的更改之間不存在重疊,並且任何要移至分支的更改均不取決於自上一版本以來的任何其他子項目中的任何更改。

回答

10

這就是我會這樣做的:將樹幹複製到分支,然後反向合併更改集。

所以如果行李箱在http://svnserver/svn/myrepo/trunk/C 和不必要的變更集是3, 6 , 9-11

svn copy http://svnserver/svn/myrepo/trunk/C http://svnserver/svn/myrepo/branch/C -m "Branch no completable work" 
svn merge -c -3,-6 http://svnserver/svn/myrepo/trunk/C <filepath to root of trunk> 
svn merge -r 11:8 http://svnserver/svn/myrepo/trunk/C <filepath to root of trunk> 
****CHECK EVERY THING WORKED*** 
svn commit . -m "Removed some changes that weren't to be finished" 

注意,-r 11:8比我打得一點要停在

+0

變更集少一這樣做,但我看不到一種簡單的方法,一旦新功能完成後,將它全部合併到主幹中。因爲我們從樹幹的頭部分叉,然後在樹幹上恢復了不需要的更改,似乎沒有什麼好方法可以將這些更改從分支中拉回來,同時更新更新以完成特徵C,同時保留對樹枝的更改與功能C無關的主幹。 – Thomee 2009-06-18 16:08:39

2

這並不回答你的問題,但在未來,你應該開始在不同的分支上開始你的每個子項目。只有當一個子項目完成並準備發貨時,它才能合併到主幹中。這樣,後備箱總是處於可運送狀態。

唯一的挑戰是如果兩個不同的子項目需要共享一些相同的新代碼。 Subversion使這種情況具有挑戰性,但其他版本控制系統(例如Git,Mercurial和Bazaar)使這種情況變得簡單。

至於回答您的實際問題,下面的網址介紹瞭如何撤消特定版本號:

http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.branchmerge.basicmerging.undo

我想你可以分支整個軀幹。然後,分公司將擁有所有的子項目(包括您正在運送的項目和尚未準備好的項目)。而且,您可以將上述鏈接中的技術反覆應用到每個要撤消的修訂中。聽起來這將是乏味和雜亂,但它應該工作。

0

有很多方法來設置回購,但我通常這樣做的方式是這樣的。

trunk - always tracks the latest code in development that will definitely get released 
branches/R1 - when I do a release, I create a branch for it, and also a tag (see below R1.0). This branch always tracks the latest version of Release 1.x. If I need to go back, I use the tags, below. 
branches/Import Tool - when I am working on a standalone feature that may not get released with latest code (e.g., main product is a calendar, import tool may not be ready in time). 
tags/R1.0 
tags/R1.1 - every time I release an update to a release, I create a tag, so that I can easily revert to that version e.g., if I need to reproduce a bug 
tags/R1.2 

當我發現在最新的代碼(幹線)的錯誤,我把它合併到當前版本分支(例如,分支/ R1),如果需要的話。

您不想創建太多的分支,因爲它會導致從主幹合併更多的工作,因此請儘量減少分支數。

相關問題