我在Mercurial方面没有丰富的经验,我主要是个Git家伙。
我很想在git Repository中镜像特定的Mercurial文件夹/文件。我实际上想做的是将文件的历史记录从Mercurial存储库导出到Git,并能够使其与将来的提交保持同步。
您对如何进行有任何建议吗?我认为,应该采取的方法是获取Mercurial补丁程序的历史记录,定期将每个提交提交为补丁程序,并将Mercurial补丁程序应用于Git存储库。
我在Mercurial方面没有丰富的经验,我主要是个Git家伙。
我很想在git Repository中镜像特定的Mercurial文件夹/文件。我实际上想做的是将文件的历史记录从Mercurial存储库导出到Git,并能够使其与将来的提交保持同步。
您对如何进行有任何建议吗?我认为,应该采取的方法是获取Mercurial补丁程序的历史记录,定期将每个提交提交为补丁程序,并将Mercurial补丁程序应用于Git存储库。
Answers:
在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
PYTHON=python2 ~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
。除此之外,它可以完美地工作。
sudo easy_install mercurial
先。会很高兴在指示中
Hg-Git可用于将Mercurial存储库转换为Git。您可以使用通过SSH,HTTP或HTTPS访问的本地存储库或远程存储库。
安装Hg-Git。
在Windows上,虽然您需要通过设置工具(在扩展部分中)启用它,但TortoiseHg随Hg-Git一起提供。
或手动 ~/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。这将hg
在Git存储库中创建一个分支。要获得master的更改,请使用以下命令(仅在第一次运行时才需要,以后只需使用git merge
或即可rebase
):
$ cd git-repo
$ git checkout -b master hg
您可以(从Mercurial方面):
--filemap
仅将需要的文件|目录转换为原始存储库的一部分或(而不是hg-git),使用Git中的Mercurial桥,从Git克隆|拉存储库
似乎是一种更现代且易于使用的替代方法来执行转换 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
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
安装
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
https://github.com/kilork/hg-git-fast-import
另一个具有以下功能的实用程序:
您可以为平台下载二进制文件,然后将其放置在路径中或使用cargo
(需要安装)rust
进行安装:
cargo install hg-git-fast-import
然后用法是这样的:
hg-git-fast-import single /path/to/source_hg /path/to/target_git
它不需要Python
和Mercurial
安装。高级配置允许替换作者或分支,为分支加上前缀等。
也许今天对某人有帮助(在将历史存储库转换为git的同时保留历史记录)。经测试可与Mercurial 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 '*:*'