将 Mercurial 文件夹转换为 Git 存储库

我对 Mercurial 没有太多的经验,我基本上是个 Git 人。

我希望在 git Repository 中镜像一个特定的 Mercurial 文件夹/文件。我实际上想要做的是将一个文件的历史从 Mercurial 存储库导出到 Git,并且能够使其与以后的提交保持同步。

你对如何继续下去有什么建议吗?我认为应该这样做: 获取 Mercurial 补丁的历史记录,定期将每个提交作为补丁导出,并将 Mercurial 补丁应用到 Git 存储库。

40190 次浏览

对于 Linux或任何与 bash/sh或类似,或 python,尝试与 快速出口:

cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

您可以(从 Mercurial 方面) :

  • 使用 转换分机--filemap选项将部分原始回购转换成较小的只需要文件 | 目录
  • 与 hg-Git 扩展推剥离回购到 Git

或者(代替 hg-Git) ,使用 Git 中的 Mercurial bridge,从 Git 克隆 | pull 存储库

Gitify

似乎是一个更现代和容易使用的替代方法来执行转换 Https://github.com/buchuki/gitifyhg

pip install gitifyhg
git clone gitifyhg::<hgrepoaddress>
# done, you have a git repo with the entire history of the hg one

Windows: TortoiseHG Hg-Git 扩展

可以使用 Hg-Git 将 Mercurial 存储库转换为 Git。您可以使用本地存储库或通过 SSH、 HTTP 或 HTTPS 访问的远程存储库。

本地存储库转换示例。

  1. 安装 Hg-Git。

    • 在 Windows 上,乌龟附带了 Hg-Git,但是您需要通过设置工具 启动它(在扩展部分)

      TortoiseHg Settings

      或手动在 ~/mercurial.ini

      [extensions]
      hggit =
      
  2. Use the following commands to convert the repository:

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    

The hg bookmark is necessary to prevent problems as otherwise hg-git pushes to the currently checked out branch confusing Git. This will create a branch named hg in the Git repository. To get the changes in master use the following commands (only necessary in the first run, later just use git merge or rebase):

$ cd git-repo
$ git checkout -b master hg

在 Windows 上可能有点棘手。在 Mercurial (hggit)中启用正确的插件之后,还可以使用 TortoiseHG。

  1. 克隆汞回购
  2. 克隆 git repo
  3. 启用控制台: 启动控制台
  4. 使用控制台:

    % hg bookmarks hg

    % hg push <relative path to>/<git-repo>

快速进口

Https://github.com/kilork/hg-git-fast-import

另一个具有以下特性的实用程序:

  1. 将单个和多个 Mercurial 存储库导入到 Git 存储库。
  2. 从以前导入的 Mercurial 存储库导入新的修订到 Git 存储库。
  3. 标签。
  4. 关闭的分行。
  5. 用差分法验证最终结果。

你可以下载 平台的二进制文件,放在路径中的某个地方,或者用 cargo安装(要求 rust安装) :

cargo install hg-git-fast-import

用法如下:

hg-git-fast-import single /path/to/source_hg /path/to/target_git

它不需要安装 PythonMercurial。高级配置允许替换作者或分支,使分支前缀等等。

在 Windows10上将 Mercurial 存储库转换为 Git

如果编码没有问题-使用 TortoiseHG Hg-Git 扩展

md new-repo && cd new-repo
git init --bare .git
cd ..\old-mercurial-repo
hg bookmark -r default master
hg push ..\new-repo
cd ..\new-repo
git config --bool core.bare false

如果编码有问题-使用快速导出

安装 Bash

以管理员身份打开 PowerShell 并运行:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

微软商店安装 Ubuntu 16.04 LTS

打开 Bash 然后跑

安装水银装置

sudo -s
apt-get update
apt install mercurial

获取快速导出 v180317(目前180317之后的版本不能正常工作)

cd /mnt/c/path_to_work_folder
git clone https://github.com/frej/fast-export.git
cd fast-export
git checkout tags/v180317
cd ..

转换存储库转换存储库

git init new-repo && cd new-repo
git config core.ignoreCase false && git config core.quotepath off
../fast-export/hg-fast-export.sh -r ../path_to_mercurial_repo/ --fe cp1251
git checkout master

编码选项:

  • -f编码,就像 -f cp1251
  • --fe文件名编码,如 --fe cp1251

如果您使用的是 Github.com,那么它们似乎有 导入特性,可以让您简单地键入 hg 项目的 URL。

首先是 创建一个新的存储库,然后在新存储库的着陆页面上滚动到底部并单击 “导入代码”按钮

context for the import code button

然后键入 前一个存储库的 URL并点击“开始导入”。

context for "Begin import" button

然后 GitHub 会解决剩下的问题!

Github taking care of business for you

注意,如果 GitHub 需要旧存储库的凭证,它会要求您提供凭证。

我找到 官方指南