2014-10-16 121 views
3

我想將具有多個分支的Git存儲庫轉換爲Mercurial存儲庫。使用hg convert只會創建一個默認分支,然後每個Git分支都有一個頭。如何將帶有分支的Git存儲庫轉換爲可用的Mercurial存儲庫?

我已經閱讀了How are git branches imported into mercurial with hg convert?,我知道不可能知道哪個提交屬於Git中的哪個分支。但是,擁有儘可能多的分支機構的存儲庫對我來說不是一個可行的解決方案。

由於所有分支都不同,我顯然不能將它們全部合併到一個頭部。

如何轉換或修改轉換後的存儲庫,使得每個磁頭都位於不同的分支上?請注意,我不一定需要將所有現有的提交都分配給正確的分支,但我希望從此時開始將提交分配給正確的分支,並且每個分支只有一個頭。

回答

2

必須知道一些事情大約GIT中:

  • Git的「分支」是不是爲任何其他 VCS分支機構,爲水銀,鐵,他們是天生的書籤(「分支」標記只有head-changeset和任何舊的changeset不包含這個元數據)
  • 當Git-boy談論分支 - 他的謊言,因爲分支只在他的Git世界分支
  • Noboby(今天)將轉換Git-在轉換回購中「分支」到分行sitories
  • 在大多數情況下(除了非常奇特的Git - 回購)hg-git而不是轉換擴展將產生更多的正確的(雙向)轉換

專門爲你我反覆操作,從(普通優秀)VonC answer由您鏈接問題,會告訴你一些照片(Git的從SmartGit,Mercurial的從TortoiseHG)

所有提交後,

GitRepo>git log --oneline 
79ea101 third evolution in branch 2 
720ac25 second evolution in branch 2 
48951c3 first evolution in branch 2 
6cf26b0 first content, to be evolved in three different branches 

導入到M之前ercurial,所有的「分支」

Git-repo

從Mercurial的POV,進口的結果有很大的不同:倉庫有一個真正的分支(名爲分支default),並在其3個匿名的樹枝,打上水銀書籤 br1-br2-br3。

HG-repo

你必須創建一個名爲分支機構和手工改寫歷史,如果你想使用水銀命名的分公司,在這個倉庫:

  • 提交新的空變更爲0後代,他們會首發分支點
  • 重訂匿名分支到這些新的父母(改變實際分支機構)

Rebased HG-repo

作爲可選的最後一步,你可以在步驟中除去了創建1空的變更(histedit做得很好)和所有無用書籤

Clean HG-repo

+0

非常感謝,偉大的解釋!歷史重寫是我在另一個問題上缺少的部分。 – Chris 2014-10-17 10:14:58

+0

@Chris - 順便說一句,你可以(理論上)自動化**歷史變化的所有**部分,除了交互設計histedit – 2014-10-17 13:24:01

相關問題