4

我正在使用 hggit 将我们的 mercurial 存储库导出到 git。我正在关注这里的教程:http: //arr.gr/blog/2011/10/bitbucket-converting-hg-repositories-to-git/ 但是这错过了所有未合并到默认值中的分支。我猜这是因为单个书签(hg bookmark -r default master)。我需要单独为每个打开的分支添加书签吗?hggit 能以某种方式挑选所有开放的分支(因为我们可能有很多分支)?

4

2 回答 2

6

hggit 能以某种方式挑选所有开放的分支吗

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

branch_bookmark_suffix = SOME-STRING

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

[git]
branch_bookmark_suffix =_bkm

所有 HG 分支都将_bkm在 Git-repo 中获得此后缀,并将以其全名 Git-branches 为人所知,但在出现与我的设置相同的任何 HG-repo 后将返回“剥离”形式

于 2019-11-16T16:23:05.897 回答
3

值得注意的是,虽然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
于 2020-06-01T13:33:02.073 回答