为什么在使用 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 --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 在评论中发表的 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 commit
、git merge
等...)。
例如:在git中,如下图:
a--*--*--x--*--*--*--*--*--* <- develop
\
*--*--* <- feature1
您可以找到有关每个单独提交的信息(图中每个 *
):
谁创建的,什么时候提交的等等...
但是您不能确定 develop
是从 a
开始,而 feature1
是从 x
开始,还是相反。
hg-git 的文档在其“branch_bookmark_suffix”段落中指出,这就是 hg-git
将 git
分支映射到 [=17 的原因=] 书签,并且你应该用书签加倍你的分支。请参阅我作为此问题的另一个答案发布的示例。
答案:如何将分支 7.3.20
从 mercurial 推送到 git?
preamble : hg git's README 的 branch_bookmark_suffix 后缀段表示要遵循的步骤
为您的 mercurial 书签选择一个后缀(我将使用 _git
):
# edit hg config, in the [git] section, add :
[git]
branch_bookmark_suffix = _git
在你的 Mercurial 仓库中,创建一个复制分支的书签:
hg bookmark 7.3.20_git 7.3.20
使用 hggit 推送到 git
仓库 :
hg push
在您的 git 存储库中,检查是否已创建 7.3.20
分支:
git branch --list
您需要为要推送到 git 的所有分支重复步骤 2.
。
我们有一个非常大的 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 --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 在评论中发表的 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 commit
、git merge
等...)。
例如:在git中,如下图:
a--*--*--x--*--*--*--*--*--* <- develop
\
*--*--* <- feature1
您可以找到有关每个单独提交的信息(图中每个 *
):
谁创建的,什么时候提交的等等...
但是您不能确定 develop
是从 a
开始,而 feature1
是从 x
开始,还是相反。
hg-git 的文档在其“branch_bookmark_suffix”段落中指出,这就是 hg-git
将 git
分支映射到 [=17 的原因=] 书签,并且你应该用书签加倍你的分支。请参阅我作为此问题的另一个答案发布的示例。
答案:如何将分支 7.3.20
从 mercurial 推送到 git?
preamble : hg git's README 的 branch_bookmark_suffix 后缀段表示要遵循的步骤
为您的 mercurial 书签选择一个后缀(我将使用
_git
):# edit hg config, in the [git] section, add : [git] branch_bookmark_suffix = _git
在你的 Mercurial 仓库中,创建一个复制分支的书签:
hg bookmark 7.3.20_git 7.3.20
使用 hggit 推送到
git
仓库 :hg push
在您的 git 存储库中,检查是否已创建
7.3.20
分支:git branch --list
您需要为要推送到 git 的所有分支重复步骤 2.
。