簡體   English   中英

如何將帶分支的Git存儲庫轉換為可行的Mercurial存儲庫?

[英]How can I convert a Git repository with branches to a workable Mercurial repository?

我想將具有多個分支的Git存儲庫轉換為Mercurial存儲庫。 使用hg convert只創建一個默認分支,然后為每個Git分支創建一個頭。

我已經閱讀了如何將git分支導入mercurial與hg convert? 並且我知道不可能知道哪個提交屬於Git中的哪個分支。 但是,與分支一樣多的存儲庫對我來說不是一個可行的解決方案。

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

如何以這樣一種方式轉換或修改轉換后的存儲庫? 請注意,我不一定需要將所有現有提交分配給正確的分支,但我希望從此時開始的提交被分配到正確的分支,並且每個分支只有一個頭。

必須知道一些關於Git的事情:

  • 對於任何其他優秀的 VCS,Git“分支”不是分支,對於Mercurial而言,它們本質上是書簽(“分支”標記只有head-changeset,而任何舊的變更集都不包含此元數據)
  • 當Git-boy談論分支時 - 他說謊,因為分支只是在他的Git世界中分支
  • Noboby(今天)將Git-“分支”轉換成轉換存儲庫的分支
  • 在大多數情況下(非常奇特的Git-repos除外) hg-git而不是轉換擴展將產生更正確的(雙向)轉換

特別為你重復操作(優秀的共同點) VonC回答鏈接你的問題,並會給你一些圖片(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

在導入Mercurial之前,所有“分支”

混帳回購

從Mercurial的POV中,導入的結果非常不同:存儲庫有一個真正的分支 (名為分支default )和3個匿名分支,標有Mercurial書簽 br1-br2-br3。

HG-回購

如果要在此存儲庫中使用Mercurial命名分支,則必須手動創建命名分支並重寫歷史記錄:

  • 提交新的空變更集作為0的后代,它們將是分支的起點
  • 為這些新父母重新分配匿名分支(更改實際分支)

重新啟動HG-repo

作為可選和最后一步,您可以刪除在步驟1中創建的空更改集( histedit做得好)和所有無用的書簽

清潔HG-repo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM