0

我们有一个非常大的 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 存储库中?

4

2 回答 2

2

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

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


如果要创建具有更明确名称的分支,请运行常规命令:

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

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

git checkout -b master hg

(按照@torek 在评论中发布的链接):hg-git 的自述文件,“使用”部分

Hg-Git 将您的书签作为分支推送到 Git 服务器,并将 Git 分支下拉并将它们设置为书签。

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


有关分支的更多详细信息:

我不习惯 Mercurial,但从我收集的信息来看,Mercurial 中的分支是具有不同属性的对象(例如:它是什么时候创建的?由谁创建的?等等),
而不是 git,分支在哪里只是对提交的浅引用,可以自动更新(例如:with git commit, git merge, etc ...)。

例如:在 git 中,使用下图:

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

您可以找到有关每个单独提交的信息(每个都*在图中):谁创建了它,何时提交等等......
但您不能确定是否develop开始于afeature1开始于x,或者是否相反。

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

于 2019-12-11T15:29:11.903 回答
1

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

序言:hg git 的 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
    

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

于 2019-12-13T16:32:26.623 回答