使用Mercurial向Git仓库推送和从Git仓库拉取
项目描述
Hg-Git Mercurial插件
- 首页
- 仓库
- 旧首页,不再维护
- 讨论
这是为Mercurial提供的Hg-Git插件,它增加了从Hg向Git服务器仓库推送和拉取的能力。这意味着您可以从Hg协作Git项目,或者将Git服务器用作同时使用Git和Hg的开发团队的合作点。
Hg-Git插件可以无损地将提交/变更集从一种系统转换到另一种系统,因此您可以通过Mercurial仓库推送,另一个Hg客户端可以拉取它,它们的变更集节点ID将相同——Mercurial数据在转换过程中不会丢失。Hg用户可能希望使用此插件进行协作,即使项目中没有Git用户,如果使用书签(见下文),甚至可能提供一些优势。
依赖项
此插件完全用Python实现——没有Git二进制依赖项,您不需要在系统上安装Git。唯一的依赖项是
Mercurial 6.1
Dulwich 0.20.11
Python 3.8
请注意,这些都是已知可以正常工作的最早版本;后续版本通常表现更好。
安装
我们建议使用包管理器安装插件,例如pip
python -m pip install hg-git
或者,您可以将此存储库克隆到某个位置,并从该目录安装
hg clone https://foss.heptapod.net/mercurial/hg-git/ cd hg-git python -m pip install .
并从您的 $PYTHONPATH 中某处启用它
[extensions] hggit =
贡献
Hg-Git的主要开发地点是 Heptapod,您可以遵循他们的指南了解如何 提交补丁。
或者,您可以遵循 如何向Mercurial本身贡献的指南,并将补丁发送到 该列表。
用法
您可以通过运行 hg clone <url> [dest] 从Mercurial克隆Git存储库。例如,如果您要运行
$ hg clone git://github.com/hg-git/hg-git.git
Hg-Git将克隆存储库并将其转换为Mercurial存储库。还支持其他协议,有关详细信息,请参阅 hg help git。
如果您从一个现有的Mercurial存储库开始,您必须在您有推送访问权限的地方设置一个Git存储库,在您的 .hg/hgrc 文件中为其添加路径条目,然后从您的存储库中运行 hg push [name]。例如
$ cd hg-git # (a Mercurial repository) $ # edit .hg/hgrc and add the target git url in the paths section $ hg push
这将把所有Mercurial数据转换为Git对象并推送到Git服务器。
现在,您有一个可以推送到/从Git存储库推送/拉取的Mercurial存储库,您可以使用 hg pull 获取更新
$ hg pull
这将拉取在此期间推送到服务器的任何提交,并为您提供一个新的头,您可以将其合并。
Hg-Git将书签推送到Git服务器作为分支,并将Git分支拉下来并设置为书签。
Hg-Git还可以用于将Mercurial存储库转换为Git。您可以使用本地存储库或通过SSH、HTTP或HTTPS访问的远程存储库。使用以下命令转换存储库,它假设您正在 $HOME 中运行
$ 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 或 git rebase 即可)。
$ cd git-repo $ git checkout -b master hg
要将新的变更集导入Git存储库,只需重新运行 hg push 命令,然后在您的Git存储库中使用 git merge 或 git rebase。
.gitignore 和 .hgignore
如果存在,当没有 .hgignore 时,将考虑 .gitignore。在后一种情况下,即使 .gitignore 有规定,也应用 .hgignore 的规则。
请注意,Mercurial 不支持排除模式,因此以 ! 开头的任何 .gitignore 模式都会触发警告。
自 2013 年发布的 0.5.0 版本以来就是如此。
进一步阅读
请参阅 hg help -e hggit 和 hg help hggit-config。
替代方案
从 5.4 版本开始,Mercurial 包含了一个名为 git 的扩展。它直接与 Git 仓库交互,避免了中间转换。这具有某些优点
每个提交只有一个节点 ID,即 Git 哈希。
数据只存储一次,因此磁盘占用空间要小得多。
然而,该扩展也有一定的缺点
它不能处理所有 Git 仓库。特别是,它不能处理 八重合并,即具有两个以上父级的合并提交。如果这样的提交包含在历史记录中,转换将失败。
您无法与 Mercurial 仓库交互。
Mercurial 一起打包的另一个扩展 convert 扩展也支持 Git。
对于想要访问 Mercurial 仓库的 Git 用户,存在其他替代方案,例如 git-remote-hg。
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪一个,请了解有关 安装包 的更多信息。