142

我在 Mercurial 方面没有丰富的经验,我主要是一个 Git 人。

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

您对如何进行有什么建议吗?我相信要走的路应该是获取 Mercurial 补丁的历史记录,定期将每个提交导出为补丁并将 Mercurial 补丁应用到 Git 存储库。

4

8 回答 8

125

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
于 2012-05-22T21:16:01.013 回答
64

Windows:TortoiseHG Hg-Git 扩展

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

本地存储库转换示例。

  1. 安装 Hg-Git。

    • 在 Windows 上,TortoiseHg带有 Hg-Git,但您需要通过设置工具启用它(在扩展部分)

      TortoiseHg 设置

      或手动输入~/mercurial.ini

      [extensions]
      hggit =
      
  2. 使用以下命令转换存储库:

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

hg书签对于防止出现问题是必要的,否则 hg-git 会推送到当前签出的分支,从而混淆 Git 。hg这将在 Git 存储库中创建一个名为的分支。要获取 master 中的更改,请使用以下命令(仅在第一次运行时需要,以后只需使用git mergeor rebase):

$ cd git-repo
$ git checkout -b master hg
于 2015-08-05T09:03:45.023 回答
13

您可以(从 Mercurial 方面):

  • 使用带有选项的Convert 扩展--filemap名将原始 repo 的一部分转换为更小的仅需要的文件|目录
  • 使用 hg-git 扩展将剥离的 repo 推送到 Git

或(而不是 hg-git),在 Git 中使用 Mercurial bridge,从 Git 克隆|拉取存储库

于 2013-03-05T12:32:23.413 回答
11

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
于 2015-03-25T18:21:51.660 回答
7

在 Windows 10 上将 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

从Microsoft Store安装 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
于 2019-10-04T17:19:55.717 回答
3

hg-git-fast-import

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

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

于 2019-06-23T18:36:23.617 回答
1

如果您使用的是github.com,它们似乎有一个导入功能,让您只需输入 hg 项目的 URL。

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

导入代码按钮的上下文

然后输入您以前的存储库的 URL并点击“开始导入”。

上下文

然后 GitHub 负责其余的工作!

Github 为您处理业务

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

哦!我找到了官方指南

于 2019-12-23T19:18:35.497 回答
-1

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

  1. 克隆 mercurial 回购
  2. 克隆 git 仓库
  3. 启用控制台: 启用控制台
  4. 使用控制台:

    % hg bookmarks hg

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

于 2019-01-18T07:16:05.393 回答