我有一个 mercurial 存储库和一个 git 存储库。两者都使用相同的代码和相同的变更集。
当我对我的 hg 存储库进行任何更改、提交并将其推送到 hg 存储库时,相同的更改也应该被推送到 git 存储库。这可能吗?如何?
我有一个 mercurial 存储库和一个 git 存储库。两者都使用相同的代码和相同的变更集。
当我对我的 hg 存储库进行任何更改、提交并将其推送到 hg 存储库时,相同的更改也应该被推送到 git 存储库。这可能吗?如何?
在 mercurial 存储库上启用扩展 hg-git 并使用 post-commit 和 post-changegroup 挂钩。在这些钩子中推送到 git 存储库。
编辑:只需将 hg-git 的非标准扩展名(参见http://hg-git.github.io/)放在某处并编辑您的 .hgrc:
[extensions]
hggit = /path/to/hg-git/hggit
[hooks]
changegroup.git = hg push git+https://path/to/git-repo.git
post-commit.git = hg push git+https://path/to/git-repo.git
另请阅读有关 hgrc / hooks 的hg 帮助。
行星制造者回答的后续行动
[paths]
本地存储库的部分[hooks]
在存储库部分创建传出挂钩hg push GIT
,其中 GIT - git-repository 的名称来自[paths]
最后的笔记和样本
当心:在两种情况下在 repo 中触发传出钩子:推送和捆绑。在使用 bundle 的情况下对 GIT 的额外推送不会对 repot Git 造成任何危险(更准确地说 - 什么都不做,因为没有任何推送),但如果你想要完美,你可以(简单地)检查值一个名为 HG_SOURCE 的环境变量,只有当它等于“push”时才推送
我真正的两遥控器回购
[paths]
github = git+ssh://git@github.com/lazybadger/Fiver-l10n.git
default = ssh://bigbadger@hg.code.sf.net/u/bigbadger/code
...
[hooks]
outgoing = hg push github
这样我就可以在推送到 SF 的仓库后推送到 GitHub 的仓库——推送可以从任何Mercurial 客户端完成:命令行、TortoiseHG、SmartGit。
(我不使用钩子名称,因为它现在是单个钩子,我必须使用我的密钥运行 Pageant 才能访问 Git-repo 的 ssh 类型,然后再推送到 sf)
对于纯 CLI 用例,您还可以使用惰性方式:创建别名,它将在新命令中结合两次推送,并仅使用此命令从命令行推送,而不是 "classic" hg push
。对于我在示例中的存储库,它可能类似于(没有错误检查的脏快速示例)
[alias]
pushc = !hg push && hg push github
并且仅hg pushc
用于推送