【问题标题】:After converting repository from hg to git, how to migrate additional changesets?将存储库从 hg 转换为 git 后,如何迁移其他变更集?
【发布时间】:2017-05-17 03:34:07
【问题描述】:

在使用 fast-export 将 mercurial 存储库迁移到 git 后,我​​发现未合并到默认值的打开命名分支未转换。现在我想将这些分支上未完成的变更集导入到新的 git repos。

我尝试了各种方法,包括 hg-git 和 hg export,但这些方法的问题是我要迁移的变更集或差异具有不同的变更集 id,并且由于找不到历史记录而导致进程出错。

我正在考虑编写一个脚本来自动从 Mercurial 导出变更集,在新的 git 存储库中找到相应的父变更集,导入到 git 阶段并提交,但我想知道是否有这样的工具- 导入没有匹配历史记录的差异 - 已经存在。那里有东西吗?

【问题讨论】:

    标签: git version-control mercurial


    【解决方案1】:

    您可以通过以下步骤将 hg 转换为 git:

    1. 在 TortoiseHg -> 全局设置 -> 扩展选项卡 -> 选择 hggit
    2. 创建初始 git 存储库:

    mkdir git cd git git init cd ..

    1. 克隆一个 hg repo 并推送到 git

    hg clone <URL for hg repo> hg bookmarks hg hg push ../git

    1. 在 git repo 中,找到 hg 的变更集

    cd .. cd git git checkout hg git log

    然后你会找到日志历史记录。

    更新

    如果您仍想使用 faste-export 进行迁移。您可以尝试以下步骤:

    migrate from mercurial to git 的启发,我们还可以通过hg log | grep changeset: | sort | uniq | sed 's/changeset: *//' &gt; ../changeset 创建变更集映射文件。

    当将 hg 迁移到 git 时,只需尝试 /path/for/fast-export/hg-fast-export.sh -r /path/for/hg-repo -A /path/for/changeset(因为 windows 操作系统似乎无法使用 hg-fast-export.sh,所以很抱歉在更新答案之前我无法尝试)。

    【讨论】:

    • 谢谢 Marina - 我确实尝试过这种方法,问题是日志历史不再匹配,因为它们具有不同的变更集哈希。这意味着我无法将转换后的 hg 存储库中的任何变更集提取到当前的 git 存储库中,因为我要导入的变更集范围具有不同的历史记录。
    • 感谢您的见解。我最终不得不编写一个脚本来处理原始 HG 存储库和已转换的 Git 存储库之间的历史记录和路径差异。
    【解决方案2】:

    最后,导入所需的内容比任何转换工具所能支持的都要复杂。我编写了一个 C# 脚本,该脚本将从 Mercurial 存储库中导出补丁,根据需要对其进行修改以匹配新的 Git 存储库布局,然后生成一系列 git 命令,这些命令在运行时将导入补丁并在要导入的分支上提交.这在我们需要导入的许多分支上运行良好。

    The LinqPad script can be found hereGist can be found here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2020-10-25
      相关资源
      最近更新 更多