2011-02-13 108 views
1

您好我已經將本地svn存儲庫轉換爲mercurial,提交了hg中的幾個修訂版,並且現在想要將這些更改恢復爲svn。
任何人都可以建議如何做到這一點?如何將修訂版本從mercurial推回顛覆?

我發現https://www.mercurial-scm.org/wiki/WorkingWithSubversion#With_Convert_extension,但不幸的是,我沒有按照那裏描述的那樣進行轉換(只是在本地回購中進行了hg轉換),並且也沒有與MQ一起工作。

是否有任何機會將個別修訂推回到顛覆或是我可以對變更進行本地比較?

+0

我經歷了一個相當複雜的過程,涉及到同時建立既是Mercurial又是Subversion工作副本的目錄。這很容易出錯,但適用於我。 – Omnifarious 2011-02-13 10:32:59

+1

您是否試圖長期支持兩種版本控制系統?這聽起來像個壞主意。你爲什麼需要這個? – robert 2011-02-13 10:39:28

回答

1

這並不像人們想象的那麼難。長期來看,我建議你使用hgsubversion作爲其他答案的建議,但是有一個非常簡單的短期解決方案。

  1. 入住一切都在你的汞回購
  2. 汞柱高達-r [最後一次修訂是從SVN轉換]
  3. 退房從SVN到一個乾淨的目錄
  4. 複製從.hg目錄中hg回購到您的svn結帳
  5. 檢查所有這些svn變化到您的hg回購(記得添加/刪除文件...這一步將需要一點,因爲hg必須掃描一切這次)
  6. 合併兩個頭你現在使用hg(假設sv n已經在你前面移動了)
  7. 通過將修改回到原始的hg倉庫並在那裏測試來測試版本(如果需要的話)(這個想法是保持你的'hg + svn倉庫'乾淨,所以丟失/添加文件易於使用SVN在各自的工具來發現)
  8. 檢查在所有的變化(記得添加/刪除文件)

一旦有了這種的地方,它實際上不是太難上使用兩個系統互相之間......但如果你需要這個長期的話,hgsubversion可能是更好的解決方案。我個人使用上述系統,因爲hgsubversion並沒有處理我們過去對svn回購所做的一些比較奇怪的事情。

編輯:我對這個解決方案做了一個假設,即svn主幹已經提前提前;如果情況並非如此,則此過程變得更簡單。如果你想分別合併每個hg修訂版本,應該沒有理由不能做到這一點,它只需要多一點工作。

  • 合併汞柱REV 1的svn尖端...犯SVN
  • 合併汞柱REV 2的svn尖端...在使用svn commit
  • 合併汞柱...
1

我個人在工作中使用Mercurial來與我們的Subversion版本庫一起工作。我強烈建議你使用hgsubversion進行克隆,因爲它可以在進行簡單的推送時提交回Subversion存儲庫。唯一的問題是你必須學會​​如何改變你的改變,因爲你不能使用mercurial的合併功能(subversion根本無法理解變更集可能有兩個父母)。

如果您想刪除subversion repo並將其替換爲mercurial,則已完成轉換的存儲庫很有用。不幸的是,這是不可能的(除非你想開始玩diff)

但是,如果你用hgsubversion克隆svn回購,你可能會(假設沒有合併)在您當前轉換的mercurial depot上製作。如果有合併,則在傳輸更改之前,您必須「線性化」它。

3

我想你可能可以使用hgsubversion

我會嘗試這樣做:

  1. 克隆SVN倉庫使用hgsubversion。
  2. 嘗試將您的更改從舊版本庫移至新版本。這可能證明是棘手的。這裏有一些解決方案:
    • Adding changes from one Mercurial repository to another,它採用exportimport命令,或transplant擴展。
    • 也許您可以使用hg pull --force從該不相關的存儲庫中提取變更集。 (請參閱How to combine two projects in Mercurial?)但是之後,您需要運行merge,當您將更改重新推送到SVN時可能會出現錯誤。所以也許你可以嘗試使用rebasemq擴展名。
    • 也許你可能可以使用mq擴展名在舊版本庫中生成一堆補丁,將它們複製到新補丁,然後應用它們。
    • 如果一切都失敗了,您可以通過重新執行您之前完成的更改來「手動」應用每個變更集。 (hg diff -c rev_id命令將會有用)
  3. 隨着你的hgsubversion副本的所有變化,只是push他們,他們將被添加到SVN倉庫。
  4. ...?
  5. 利潤!