为什么在使用 hggit 将我的 mercurial 存储库推送到它之后,我的 git 存储库是空的?

Why is my git repository empty after using hggit to push my mercurial repository to it?

我们有一个非常大的 Mercurial 存储库 - 大约 11GB,大约有 130,000 次提交。我正在尝试使用 Mercurial 的 hggit 扩展将它转换为 git,但我有一个奇怪的经历。

附带说明一下,我在 Windows 10

上执行此操作

首先,我创建一个空目录,然后调用 git init 来初始化 git 存储库。

然后,我转到 hg 目录并根据我阅读的几篇文章发出(对我来说不常见的)命令 hg bookmark hg

然后,我发出hg push c:\path\to\repo

结果如下:

似乎已成功处理并推送存储库。

但是,当我转到 git 存储库目录时,它是空的,除了 .git 目录。在那个 git 目录中,所有标签都存在,并且有一个大约 11GB 的大 *.pack 文件,鉴于大小,我认为它与我们的存储库有关。

我认为我需要 checkout 一个分支才能显示文件,但尝试检出最近的一个分支会导致:

error: pathspec 'rio' did not match any file(s) known to git.

所以我的问题是:我需要做什么才能让我的文件出现在 git 存储库中?

运行 git tag --listgit branch --list 查看由您的 hg push 命令创建的引用的实际名称。

然后您可以签出相应的分支或标签。


如果您想创建一个名称更明确的分支,运行常规命令:

git checkout -b new_branch_name [hash or tag or branch]

例如:如果您想创建一个 master 分支,从与名为 hg 的分支相同的点开始:

git checkout -b master hg

(继@torek 在评论中发表的 link 之后):hg-git's Readme, "Usage" section

Hg-Git pushes your bookmarks up to the Git server as branches and will pull Git branches down and set them up as bookmarks.

如果您想从 mercurial 存储库中的特定点创建更多分支,则必须将它们添加为书签。


关于分支的额外细节:

我不习惯使用 Mercurial,但据我所知,Mercurial 中的分支是对象,它们具有不同的属性(例如:它是什么时候创建的?由谁创建的?等等...),
与 git 相反,分支只是对提交的浅层引用,可以自动更新(例如:使用 git commitgit merge 等...)。

例如:在git中,如下图:

a--*--*--x--*--*--*--*--*--* <- develop
          \
           *--*--* <- feature1

您可以找到有关每个单独提交的信息(图中每个 *): 谁创建的,什么时候提交的等等...
但是您不能确定 develop 是从 a 开始,而 feature1 是从 x 开始,还是相反。

hg-git 的文档在其“branch_bookmark_suffix”段落中指出,这就是 hg-gitgit 分支映射到 [=17 的原因=] 书签,并且你应该用书签加倍你的分支。请参阅我作为此问题的另一个答案发布的示例。

答案:如何将分支 7.3.20 从 mercurial 推送到 git?

preamble : hg git's README 的 branch_bookmark_suffix 后缀段表示要遵循的步骤

  1. 为您的 mercurial 书签选择一个后缀(我将使用 _git):

    # edit hg config, in the [git] section, add :
    [git]
    branch_bookmark_suffix = _git
    
  2. 在你的 Mercurial 仓库中,创建一个复制分支的书签:

    hg bookmark 7.3.20_git 7.3.20
    
  3. 使用 hggit 推送到 git 仓库 :

    hg push
    
  4. 在您的 git 存储库中,检查是否已创建 7.3.20 分支:

    git branch --list
    

您需要为要推送到 git 的所有分支重复步骤 2.