2014-12-03 70 views
2

,我已經在我的公司被捲入一期工程已在SVN已經有點亂了(我會怪我們的期望,工程師應該知道如何使用它,恕不另行曝光和無訓練)。該項目以前由一名工程師擁有,但所有權已轉讓給較新員工,他們對SVN的工作原理不熟悉。當他開始對代碼庫工作,他做了一個「分支」來制定的,但忽略了用TortoiseSVN 科/標籤...命令。分支合併到主幹不共享祖先

相反,他只是在./branches目錄中創建了一個名爲Development的目錄,並手動複製了所有文件。在過去的6個月裏,這個分支已經成爲了主幹應該是什麼,並且它已經被廣泛使用而沒有合併回主幹。自那時以來,該項目已在規模和增長能力,到現在有幾個新的目錄,文件,並添加到Development分支的外部哪裏。在這一點上,我們正在討論800個修訂差異。

那麼,如何解決呢?

目前,如果我通過合併......命令來運行,使用合併一個版本範圍的選擇,我可以亂用幾種方式的選擇,但他們沒有通過測試合併沒有衝突和樹木衝突。具體而言,主要發生在第二衝突提交到Development「分支」,並認爲衝突可能就不會發生了。到目前爲止,我已經試過:

  • 合併一個版本範圍的 - >所有的修訂 - >測試合併
  • 合併一個版本範圍的 - >特定範圍 = REV1-REV2 - >測試合併
  • 合併一系列修訂特定範圍 = REV1-REV2 - >忽略祖先 = True - >測試合併
  • 合併兩個不同的樹 - >測試合併
  • 合併兩個不同的樹 - >忽略祖先 = True - >測試合併

在這5個組合中,最後一個看起來最有希望,因爲只有樹衝突,它們只出現在添加的文件夾和文件中(外部看起來像它們會被合併,但很難分辨何時使用測試合併

我想盡可能保留歷史記錄,但是此時trunk中的代碼已經過時,無法使用,我不會完全反對僅僅複製它。將這條「分支」轉移到trunk上最無痛的路徑是什麼,同時保留關於發生的事情的最多信息?

我已經和擁有這個項目的開發者談過了,我們將一起解決這個問題,以便他可以更多地瞭解SVN是如何工作的以及如何正確使用它。我想做好準備,以便我們能夠快速完成並儘可能從經驗中獲得收穫。

回答

3
  • 在疑難案件CLI-方式是更好,更安全,比GUI
  • 「合併兩個不同的樹」是99%的合併重返社會的壞的和醜陋的方式合併
  • 重新仔細閱讀"Noticing or Ignoring Ancestry"從SVN書,以便更好地瞭解內部和一個必須選項,你的情況

NotShort恢復

爲了得到Development狀態在軀幹和從Development開始放棄所有幹線的歷史,你必須調用(在後備箱的清潔WC)

svn merge --ignore-ancestry --accept 'tf' /PATH/TO/Development

(沒有合併,衝突,可能樹衝突)

對於TSVN它

合併一個版本範圍的 - >次所有的修訂特定範圍 = empty等於「所有」) - >忽略祖先 = True

但你不能夠定義自動解決衝突(--accept選項),因爲它可以在CLI中完成