2010-03-09 121 views
11

我有一個巨大的項目。Svn合併幹線和分支

我需要做一個分支 - 這將是該項目的第2版,但我也需要保持軀幹和與分支1的bug修復改變它在平行於版本1

我需要將故障修復從樹幹合併到分支1,同時向分支添加新功能。

最後,我需要將所有更改合併到主幹中,並從中創建新標記。

所以我需要爲第1版,新分支的bug修復版本2,當然在版本合併bug修復2.

我使用SVN但SVN使問題所有的時間。沒有衝突我就不能合併任何東西。

有人可以給我一個建議該怎麼辦?

問候

回答

0

你應該首先創建了一個「標籤」爲您的版本1,這是你的產品的發行版本。該項目的第2版將成爲主幹的延續,而不是版本2的分支。你需要創建一個分支的唯一原因是對(相關)版本1進行錯誤修復。除非你有理由不這樣做,否則你爲新版本做的所有事情都將在主幹上完成。

+1

我試過這個。但問題依然存在。 我們再次有一個bug修復分支和一個新功能主幹。 將版本1的錯誤修復合併到版本2中 - 幹線將導致很多衝突。 svn無法合併單個文件而沒有衝突。用手解決衝突可以造成很多問題和時間。 與重新合併融合並沒有幫助! 我想知道其他公司如何解決這個問題 - 錯誤修復,新版本和合並這兩個? 看來svn對這個工作之王來說並不好。 – 2010-03-09 16:25:11

6

爲了向舊版本提供錯誤修正而創建分支稱爲release branch。你應該開發主幹上的錯誤修正(因爲他們需要進入所有新版本的權利?)。從那裏你將它們合併回到仍然支持的版本。這意味着,當版本1不再受支持時,您將停止將錯誤修復合併回去。有關更多信息,請參閱documentation

如果trunk中的錯誤修正無法合併到分支,解決方案是創建'backport分支'。在這裏,您要麼部分合並來自中繼的修復,要是代碼太不同,部分重寫相同的修復。還建議記錄您通常爲解決問題而執行的合併,因此合併跟蹤可幫助您查看問題是否已解決。

如果您正在修復/branches/1.2.x,Subversion項目使用的命名約定是創建一個名爲1.2.xr [REVNUM]的backport分支,其中REVNUM表示您正在反向移植的修訂版本,或1.2。 x-issue [ISSUENUM],其中ISSUENUM表示您正在解決的問題。

當您完成創建後向移植修復程序,您可以用

svn checkout .../branches/1.2.x myproduct-1.2.x 
svn merge --reintegrate .../branches/1.2.x-r123 myproduct-1.2.x 

其合併到發行重返分行後,分行應予以刪除。

0

首先,我建議你看看@SanderRijken建議的SVN documentation,看看有什麼功能和發佈分支。

但是,根據你的問題,我認爲你的主要問題是不同的。也就是說,沒有任何合併是「工作」(即所有衝突都是你不會期望的)。所以,也許你可以詳細說明你在做什麼完全是(比如發佈你用於合併的命令)?

0

將樹幹中的更改合併到分支後,我發現最好使用2-URL合併將分支合併回樹幹。據我所知- 重裝它只是一個簡單的2-URL合併的語法,有時fails(雖然我最後使用的是在1.5版中重新使用)。

svn merge url://[email protected] url://[email protected] . 

其中mergedRev是上次合併到分支中時的修訂。

如果您使用簡單的合併指令,您從樹幹合併到分支的所有更改將被視爲已更改,需要在合併時添加到樹幹。 2-URL合併中的第一個URL告訴svn哪些改變來自幹線。這應該大大減少合併過程中的衝突。

至於你的資料庫的結構,我可以提出一個博客條目(見下文,因爲我只允許使用在我的後一個鏈接)從ariejan.net

博客條目:ariejan.net/2006/11/24/svn-how-to-structure-your-repository/

相關問題