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

时间:2012-05-22 21:12:29

标签: git mercurial

我对Mercurial没有太多经验,我主要是Git家伙。

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

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

10 个答案:

答案 0 :(得分:116)

尝试fast export

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

答案 1 :(得分:41)

Hg-Git扩展

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

本地存储库转换的示例。

  1. 安装Hg-Git。

    • 在Windows上,TortoiseHg附带Hg-Git,但您需要enable it通过设置工具(在扩展部分中)

      TortoiseHg Settings

      或在~/mercurial.ini

      中手动操作
      [extensions]
      hggit =
      
  2. 使用以下命令转换存储库:

    $ mkdir git-repo; cd git-repo; git init; cd ..
    $ cd hg-repo
    $ hg bookmarks hg
    $ hg push ../git-repo
    
  3. hg书签是必要的,以防止出现问题,否则hg-git会将当前签出的分支推入混乱的Git。这将在Git存储库中创建一个名为hg的分支。要获取master中的更改,请使用以下命令(仅在第一次运行时需要,稍后才使用git mergerebase):

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

答案 2 :(得分:12)

你可以(来自Mercurial方面):

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

或(代替hg-git),使用Mercurial bridge in Git,从Git克隆|拉出存储库

答案 3 :(得分:9)

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

答案 4 :(得分:3)

在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并运行

安装Mercurial

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

答案 5 :(得分:2)

我在这里写到了如何做到这一点:Push to GitHub using Mercurial。我一直在使用这种技术将几个Mercurial存储库推送到GitHub超过一年,没有任何问题。

答案 6 :(得分:0)

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

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

    % hg bookmarks hg

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

答案 7 :(得分:0)

hg-git-fast-import

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

另一个具有以下功能的实用程序:

  1. 将单个和多个Mercurial存储库导入到Git存储库。
  2. 将新版本从以前导入的Mercurial存储库导入到Git存储库。
  3. 标签。
  4. 关闭的分支机构。
  5. 使用diff验证最终结果。

您可以为您platform下载二进制文件并将其放在路径中或与cargo一起安装(要求rustinstalled):

cargo install hg-git-fast-import

然后用法如下:

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

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

答案 8 :(得分:0)

如果您使用的是 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将要求您提供旧存储库的凭据。

哦!我发现了official guide

答案 9 :(得分:0)

也许今天对某人有帮助(在将历史资料库转换为git的同时保留历史记录)。经测试可与Mercural 4.0.1。一起使用。

~$ git clone https://*old_hg_repo*
~$ git clone https://github.com/frej/fast-export.git
~$ cd fast-export
~$ git checkout tags/v180317
~$ cd ..
~$ mkdir new_git_repo
~$ cd new_git_repo
~$ git init
~$ .../fast-export/hg-fast-export.sh -r ../old_hg_repo/ --force
~$ git checkout HEAD

最后要推送您新转换的本地存储库。

~$ git push REMOTE '*:*'