2011-03-09 96 views
1

我試圖解決一個SVN項目中,以下事情發生了:重做與SVN手動合併合併

一個特性分支從樹幹 有定期提交到這個分支跳轉。 當分支合併到主幹時,開發人員並沒有使用SVN合併,而是WinMerge(!),所以我們失去了所有的歷史記錄。 此外,還有一些在手動WinMerge中錯過的小錯誤修復。 這發生在幾個星期前,從那以後就有了定期提交主幹,所以我們不能簡單地恢復原狀。

所以,我想回去重做正確的合併,但是這已經被證明比我想象的要更復雜...

如果我試圖恢復到一個點在此之前,「BadMerge 「然後進行適當的合併,我不能重新合併在BM之後發生的其他更改。

所以,我想我必須使用svnadmin轉儲和加載,類似於this,但我無法解決我需要做的事情。

  1. BM(ChangesetX)之前的轉儲更改。
  2. 自卸變化後BM(ChangesetY。
  3. 負載ChangesetX什麼?一個新的回購?
  4. 做這個
  5. 負荷ChangesetY的適當合併

這可能嗎?任何幫助將是很大的讚賞。

感謝

湯姆

回答

0

也許不是最優雅的方式,但可行的在客戶端:軀幹

  • SVN導出HEAD進入目錄主幹的
  • svn籤BAD_COMMIT進入目錄乙
  • 拷貝過來的文件,從A到B

B現在包含BAD_COMMIT之後的所有提交作爲本地更改(這些提交之間的區別)。

現在:

主幹
  • svn籤BAD_COMMIT-1到目錄ç
  • 做你的分支SVN合併,並開始在樹幹的分支點進入工作將C
  • 拷貝過來C到A

現在您在目錄A中具有正確的合併作爲對HEAD的本地更改。 Commit A. Trunk現在與HEAD具有正確的合併。

最後:

  • SVN更新B到HEAD
  • 解決衝突
  • 犯乙

此時,您已經COMMITED一個健全的合併和壞的合併後的所有更改。你放棄了一些歷史,但是在服務器端使用轉儲時沒有什麼麻煩。

祝你好運!

1

你可以做的是:

  1. SVN book在那個開發者,最好在一些重型類型的紙張打印輸出的形式。 (如果他成功地生存下來,解僱他。)

  2. 有一個選項,SVN經過合併和記錄的模式該版本已經在文件和文件夾的屬性被合併,但實際上沒有更改任何文件。 (使用SVN咿:他們的「財產狀況」「改變」,但他們的「文本狀態」不是。)

我沒有用的,而SVN命令行,所以我不知道如何與它這樣做,但TortoiseSVN有這樣的:

enter image description here

+0

查看http://svnbook.red-bean.com/en/1.7/svn-book.pdf的第140頁svn命令... – 2012-06-07 06:26:34

0

你是not limited to take what your versioning tool think is common base, 和記錄像SBI suggests合併可能是一個好主意。如果一切都失敗了,你可以通過檢查文件的三個版本來手動進行合併,並直接使用KDiff3,就像上面鏈接的答案中所述。

如果版本X和Y是從功能分支,版本A到E爲主幹,

A----------+ 
    |   | 
    |   | 
    \_/  \_/ 
    B   X 
    |   | 
    |   | 
    \_/  \_/ 
    C <======= Y Merge without being recorded by svn as a merge (right?), aka BadMerge 
    | 
    | 
    \_/ 
    D 
    | 
    | 
    \_/ 
    E 

然後重新進行合併退房版本AYB與kdiff3合併。這會給你一個新的C'版本,最好將缺少C中引入的錯誤。然後,您希望其他更改在主幹上完成,因此合併C',CE。這應該給你一個新版本,你可以檢查版本F

我不知道svn是否足以提供任何建議,您應該如何檢查C'以及如何處理該問題,但上述步驟至少應能爲您提供所需的最終結果。