1

我有一个 mercurial 存储库和一个 git 存储库。两者都使用相同的代码和相同的变更集。

当我对我的 hg 存储库进行任何更改、提交并将其推送到 hg 存储库时,相同的更改也应该被推送到 git 存储库。这可能吗?如何?

4

2 回答 2

1

在 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 帮助。

于 2015-06-23T11:02:18.643 回答
1

行星制造者回答的后续行动

  1. 安装 hg-git 扩展
  2. (为简单起见,不是强制性的)将远程 git-repo 添加到[paths]本地存储库的部分
  3. 手动推送到Git-repo,推送成功
  4. [hooks]在存储库部分创建传出挂钩hg push GIT,其中 GIT - git-repository 的名称来自[paths]
  5. 玩得开心

最后的笔记和样本

当心:在两种情况下在 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 用例,您还可以使用惰性方式:创建别名,它将在新命令中结合两次推送,并仅使用此命令从命令行推送,而不是 "c​​lassic" hg push。对于我在示例中的存储库,它可能类似于(没有错误检查的脏快速示例)

[alias]
pushc = !hg push && hg push github

并且仅hg pushc用于推送

于 2015-06-24T01:12:28.263 回答