我对Mercurial没有太多经验,我主要是Git家伙。
我想在git Repository中镜像一个特定的Mercurial文件夹/文件。我实际上要做的是将文件的历史记录从Mercurial存储库导出到Git,并能够与未来的提交保持同步。
您对如何进行有任何建议吗?我相信要走的路应该是获取Mercurial补丁的历史记录,定期将每个提交导出为补丁,并将Mercurial补丁应用于Git存储库。
答案 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可用于将Mercurial存储库转换为Git。您可以使用通过SSH,HTTP或HTTPS访问的本地存储库或远程存储库。
安装Hg-Git。
在Windows上,TortoiseHg附带Hg-Git,但您需要enable it通过设置工具(在扩展部分中)
或在~/mercurial.ini
[extensions]
hggit =
使用以下命令转换存储库:
$ mkdir git-repo; cd git-repo; git init; cd ..
$ cd hg-repo
$ hg bookmarks hg
$ hg push ../git-repo
hg
书签是必要的,以防止出现问题,否则hg-git会将当前签出的分支推入混乱的Git。这将在Git存储库中创建一个名为hg
的分支。要获取master中的更改,请使用以下命令(仅在第一次运行时需要,稍后才使用git merge
或rebase
):
$ cd git-repo
$ git checkout -b master hg
答案 2 :(得分:12)
你可以(来自Mercurial方面):
--filemap
选项的Convert extension将原始仓库的一部分转换为更小的只需要的文件|目录或(代替hg-git),使用Mercurial bridge in Git,从Git克隆|拉出存储库
答案 3 :(得分:9)
似乎是一种更现代,更易于使用的替代方案来执行转换 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)
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
以管理员身份打开PowerShell并运行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
从Microsoft Store安装Ubuntu 16.04 LTS
安装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。
使用控制台:
% hg bookmarks hg
% hg push <relative path to>/<git-repo>
答案 7 :(得分:0)
https://github.com/kilork/hg-git-fast-import
另一个具有以下功能的实用程序:
您可以为您platform下载二进制文件并将其放在路径中或与cargo
一起安装(要求rust
为installed):
cargo install hg-git-fast-import
然后用法如下:
hg-git-fast-import single /path/to/source_hg /path/to/target_git
它不需要安装Python
和Mercurial
。高级配置允许替换作者或分支,为分支加上前缀等。
答案 8 :(得分:0)
如果您使用的是 github.com ,则它们似乎具有导入功能,可让您简单地输入hg项目的URL。
首先创建一个新的存储库,然后在新存储库的登录页面上滚动到底部,然后单击“导入代码”按钮。
然后键入您先前存储库的 URL ,然后点击“开始导入”。
然后GitHub负责其余的工作!
请注意,如果需要,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 '*:*'