hggit 不导出未合并的分支

hggit doesn't export unmerged branches

我正在使用 hggit 将我们的 Mercurial 存储库导出到 git。我在这里学习教程:http://arr.gr/blog/2011/10/bitbucket-converting-hg-repositories-to-git/ 然而,这会错过所有未合并到默认值的分支。我想这是因为单个书签(hg bookmark -r default master)。我需要分别为每个打开的分支添加书签吗? hggit 能否以某种方式选择所有打开的分支(因为我们可能有很多分支)?

Can hggit somehow pick all open branches

是的。您错过了 hg-git

中的选项

branch_bookmark_suffix = SOME-STRING

翻译(透明地)在 Git 的 "branches" 中命名的 Mercurial 分支(如果需要,还向后翻译)。来自我个人配置的示例

[git]
branch_bookmark_suffix =_bkm

所有 HG-branches 将在 Git-repo 中获得此 _bkm 后缀,并将以 Git-branches 这个全名为人所知,但 return以 "stripped" 形式出现在任何 HG-repo 中,设置与我的

相同

值得注意的是,虽然 hggit branch_bookmark_suffix 会将带有该后缀的 Mercurial bookmarks 转换为 Git branches没有那个后缀,不说明这不直接适用于Mercurial命名的分支。 Git 分支不同于 Mercurial 分支,更类似于 Mercurial 书签,只是它们在存储库中共享,而不仅仅是本地的。

为了 hggit branch_bookmark_suffix 应用到 Mercurial 命名分支,这些分支需要具有适当后缀的 Mercurial 书签才能转换为 Git 分支。

例如,除了在hgrc中加入hggit:

[extensions]
hgext.bookmarks =
hggit =

[git]
branch_bookmark_suffix = _bookmark

还需要为每个命名分支添加一个 Mercurial(本地)书签。 例如,下面的 bash 脚本可用于执行此操作 - 请注意,它单独处理 Mercurial default 分支,因此它对应于 Git master branch.

#!/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