hggit不导出合并分支

时间:2019-11-15 15:14:22

标签: git mercurial hg-git

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

2 个答案:

答案 0 :(得分:3)

  

hggit是否可以选择所有打开的分支

是的。您错过了hg-git中的选项

branch_bookmark_suffix = SOME-STRING

可以(透明地)翻译Git的“分支”中Mercurial的命名分支(如果需要,可以反向翻译)。来自我个人配置的示例

[git]
branch_bookmark_suffix =_bkm

所有HG分支机构都将在Git-repo中获得此后缀_bkm,并以全称被称为Git分支机构,但在任何带有HG-repo的HG-repo中出现后,将恢复为“剥离”形式。与我的设置相同

答案 1 :(得分:1)

值得注意的是,虽然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 default 分支,因此它对应于Git master 分支。

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