2009-10-20 182 views
20

我接手了一個軟件項目,並決定使用Tortoise SVN將所有內容放在SVN下(在Assembla上)。幹線在ROOT下。所以幹線包含了整個應用程序(我標記爲1.0)。對於我的第一個重要功能,我創建了一個名爲「dev」的功能分支。如何「修復」SVN分支/樹衝突?

我可以將trunk分支中的更改合併到dev分支中而不會出現問題(因爲我在做小錯誤修復)。一旦我的功能完成,我做了一個合併回樹幹分支。一切都在起作用。 ROOT下的新代碼正確顯示了新功能。但後來我做了一個提交(合併的結果),現在每次我嘗試從根目錄或開發分支進行合併時,SVN都會抱怨許多文件上的「樹衝突」。即使是合併後我沒有碰到的文件。我試圖解決衝突,但沒有成功。

我是唯一的開發人員,所以我並不真正關心存儲庫的重大更改。但是如果可能的話,我仍然想保留所有文件的歷史記錄。

解決此問題的最佳方法是什麼?有沒有一種方法可以將ROOT中繼中的所有最新文件標記爲文件的「明確」版本?


[編輯]更多信息

  1. 是, '主' 和 '樹幹' 是一回事。我已經澄清了我的問題
  2. 從功能分支中合併回來後,您是否首先從trunk中進行了另一次合併以取消最新的trunk變化?「是的,trunk是最新的。所有從主幹上的改變
  3. 「一切都搞砸了提交」:我的意思是提交很好,但是當我開始從幹線/幹線合併後,SVN抱怨'樹衝突。
  4. 我有超過200棵樹衝突。所以,我正在尋找的是一個‘照單全收’命令

[編輯] elhoim解決方案沒有解決我的問題。但是,他對SVN版本問題是正確的。目前(2009-10-28),Assembla使用SVN v1.5.1,我的tortoiseSVN使用v1.6。所以這就是我有這麼多樹衝突的原因。我嘗試使用elhoim鏈接提供的解決方案,但它不起作用(在嘗試HEAD到HEAD的合併之前,我嘗試了多次合併,有些文件因爲這個原因沒有轉到根分支)。

看到HEAD到HEAD的合併仍然不起作用,我決定刪除我的分支文件夾中的所有「.svn」文件,將這些文件複製到ROOT文件夾中並進行提交。

+0

@eldimo:當你把'main'合併到'dev'中時,是與主幹相同的'main'分支嗎?還是有變化,坐在'主',樹幹還沒有看到? – dls 2009-10-20 01:43:06

+1

@dls:我認爲他使用術語「main」和「trunk」來表示同一個分支。 – 2009-10-20 02:41:49

+0

@eldimo:需要一些細節以獲得更好的清晰度:1.當您從功能分支中合併回來時,您是否首先從trunk中進行另一次合併以取消最新的trunk變化? 2.你的意思是「所有事情都搞砸了」嗎?是否有可能提供您在提交期間得到的錯誤消息? – 2009-10-20 02:47:45

回答

6

在嘗試合併回主幹之前,似乎在主幹上的目錄結構級別上進行的某些更改沒有吸收到開發分支中。這可能會導致你的案例中的樹衝突。

我發現SVN書的這一部分非常有幫助,它包含解決像你這樣的情況的方法。希望這可以幫助。 http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html

[編輯]附加信息:


你是否已經運行SVN解決你在哪裏實際上改寫/解決衝突的版本的工作空間? 在有問題的工作區(實際執行合併的那個工作區)上可能存在仍然標記爲「衝突」的文件/文件夾 - 因此,一旦您查看了這些文件並手動解決衝突,則可以運行svn「resolved」。我使用subversion命令行客戶端進行合併 - 但我已驗證,並且此選項在烏龜上也可用。這應該消除衝突狀態並讓你繼續。祝你好運。

5

一般來說,SVN的合併支持只能使用一個功能分支來處理一次。也就是說,您可以在其中工作並將變化從主幹合併到主幹中,然後在完成後使用svn merge --reintegrate將其合併回主幹。

之後,如果你想繼續工作,你需要創建一個新的分支來工作。我認爲如果你想保留相同的版本庫路徑,你可以刪除舊版本,並在原地創建一個新版本,但是你可能想先試試一下測試版本,以防svn:merge信息變得棘手。

這並不完美。從當前合併語義引入時,請參閱this post瞭解更多詳細信息。

此外,提防任何使用svn cpsvn mv的比分支其他目的和合並 - 如果你這樣做,你將需要刪除他們所創造的虛假svn:merge性能(在兩個分支和主幹如果需要的話)在運行重新集成之前或它會失敗將樹衝突消息。總體而言,與分佈式VCS家族(git,hg,bzr,darcs等)相比,svn的分支和合並仍然相當薄弱,但是如果遵循這些指導方針,它就可以完成這項工作。

+1

從1.7開始我們一直存在這個問題,我在SVN紅皮書活文檔中看到這個「1.5」或「1.6」功能的腳註有時會發現明顯的問題併爲您修復。因此,在您將特性分支(或者我們的案例中的CI發佈分支)合併到樹幹衝突後,似乎唯一真正的解決方案就是吹掉原始分支並創建一個新分支。 ..但是等等,這對CI不起作用!該怎麼辦?! – 2012-09-21 22:06:40