我在 Mercurial 方面没有丰富的经验,我主要是一个 Git 人。
我很想在 git Repository 中镜像一个特定的 Mercurial 文件夹/文件。我实际上想要做的是将文件的历史从 Mercurial 存储库导出到 Git,并能够与未来的提交保持同步。
您对如何进行有什么建议吗?我相信要走的路应该是获取 Mercurial 补丁的历史记录,定期将每个提交导出为补丁并将 Mercurial 补丁应用到 Git 存储库。
在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
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 会推送到当前签出的分支,从而混淆 Git 。hg
这将在 Git 存储库中创建一个名为的分支。要获取 master 中的更改,请使用以下命令(仅在第一次运行时需要,以后只需使用git merge
or rebase
):
$ cd git-repo
$ git checkout -b master hg
您可以(从 Mercurial 方面):
--filemap
名将原始 repo 的一部分转换为更小的仅需要的文件|目录或(而不是 hg-git),在 Git 中使用 Mercurial bridge,从 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
需要安装。高级配置允许替换作者或分支,使分支前缀等等。
如果您使用的是github.com,它们似乎有一个导入功能,让您只需输入 hg 项目的 URL。
首先创建一个新存储库,然后在新存储库的登录页面上滚动到底部并单击“导入代码”按钮。
然后输入您以前的存储库的 URL并点击“开始导入”。
然后 GitHub 负责其余的工作!
请注意,如果需要,GitHub 会要求您提供旧存储库的凭据。
哦!我找到了官方指南
在 Windows 上可能有点棘手。在 mercurial( hggit
) 中启用正确的插件后,也可以使用 TortoiseHG。
使用控制台:
% hg bookmarks hg
% hg push <relative path to>/<git-repo>