我正在使用hggit将我们的mercurial存储库导出到git。我在这里学习教程:http://arr.gr/blog/2011/10/bitbucket-converting-hg-repositories-to-git/但是,这会错过所有未合并为默认分支的分支。我想这是因为单个书签(hgbookmark-r默认主控(。我需要分别为每个打开的分支添加书签吗?hggit能以某种方式选择所有打开的分支吗(因为我们可能有很多这样的分支(?
hggit能以某种方式选择所有打开的分支吗
是。您错过hg git 中的选项
branch_bookmark_suffix = SOME-STRING
它在Git的"分支"中(透明地(翻译Mercurial的命名分支(如果需要,可以向后翻译(。来自我个人配置的示例
[git]
branch_bookmark_suffix =_bkm
所有HG分支都将在Git repo中获得此_bkm
后缀,并将以该全名称为Git分支,但在出现在与我的相同设置的任何HG repo后,将返回"剥离"形式
值得注意的是,虽然hggit
branch_bookmark_suffix
会将带有该后缀的Mercurial书签转换为没有该后缀的Git分支,但这并不能解释这不直接适用于Mercurial命名的分支。Git分支不同于Mercurial分支,更类似于Mercurial书签,只是它们在存储库中共享,而不仅仅是本地的。
为了使hggit
branch_bookmark_suffix
应用于Mercurial命名的分支,这些分支需要具有带适当后缀的Mercurial书签才能转换为Git分支。
例如,除了将hggit添加到hgrc:之外
[extensions]
hgext.bookmarks =
hggit =
[git]
branch_bookmark_suffix = _bookmark
还需要为每个命名的分支添加一个Mercurial(本地(书签。例如,下面的bash脚本可以用来实现这一点——注意,它单独处理Mercurial默认分支,因此它对应于Gitmaster分枝。
#!/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