我正在使用 hggit 将我们的 mercurial 存储库导出到 git。我正在关注这里的教程:http: //arr.gr/blog/2011/10/bitbucket-converting-hg-repositories-to-git/ 但是这错过了所有未合并到默认值中的分支。我猜这是因为单个书签(hg bookmark -r default master)。我需要单独为每个打开的分支添加书签吗?hggit 能以某种方式挑选所有开放的分支(因为我们可能有很多分支)?
2 回答
hggit 能以某种方式挑选所有开放的分支吗
是的。你错过了 hg-git 中的选项
branch_bookmark_suffix = SOME-STRING
它在 Git 的“分支”中(以及向后,如果需要)翻译(透明地)Mercurial 的命名分支。来自我的个人配置的示例
[git]
branch_bookmark_suffix =_bkm
所有 HG 分支都将_bkm
在 Git-repo 中获得此后缀,并将以其全名 Git-branches 为人所知,但在出现与我的设置相同的任何 HG-repo 后将返回“剥离”形式
值得注意的是,虽然hggit
branch_bookmark_suffix
会将带有该后缀的 Mercurial书签转换为不带有该后缀的 Git分支,但它并没有说明这不适用于直接命名为 Mercurial 的分支。Git 分支与 Mercurial 分支不同,更类似于 Mercurial 书签,只是它们在存储库中共享,而不仅仅是本地。
为了hggit
branch_bookmark_suffix
适用于 Mercurial 命名分支,这些需要具有要转换为 Git 分支的适当后缀的 Mercurial 书签。
例如,除了将 hggit 添加到 hgrc 之外:
[extensions]
hgext.bookmarks =
hggit =
[git]
branch_bookmark_suffix = _bookmark
还需要为每个命名分支添加一个 Mercurial(本地)书签。例如,可以使用以下 bash 脚本来执行此操作 - 请注意,这会单独处理 Mercurial默认分支,因此它对应于 Git主分支。
#!/bin/bash
BRANCHES=`hg branches`
for BRANCH in ${BRANCHES[@]}; do
if [[ ! "$BRANCH" =~ ^([0-9]+:)|(inactive)|(closed) ]];
then
echo $BRANCH
if [[ "$BRANCH" =~ "default" ]];
then
`hg bookmark -r "${BRANCH}" "master"`
else
`hg bookmark -r "${BRANCH}" "${BRANCH}_bookmark"`
fi
fi
done