使用hg命令同时操作git和hg

时间:2015-06-23 10:30:04

标签: git version-control mercurial hg-git

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

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

2 个答案:

答案 0 :(得分:1)

在mercurial存储库上启用扩展名hg-git,并使用post-commit和post-changegroup hook。在这些钩子中推送到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 help

答案 1 :(得分:1)

后续行星制造者的回答

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

    小心:在两个案例中的repo中触发了传出钩子:在推送和捆绑上。在使用捆绑的情况下额外推送到GIT将在编辑Git时没有任何危险(更确切地说 - 什么也不做,因为没有什么可以推送),但如果你想要完美,你可以(简单地说)检查名为HG_SOURCE的环境变量的值,仅当它等于"push"

    时才推送

    我真正的双遥控回购

    [paths]

    这样我就可以在推送到SF的回购后推送到GitHub的回购 - 并且可以从任何 Mercurial客户端:命令行进行推送, TortoiseHG,SmartGit。

    (我不使用钩子名称,因为它现在是单个钩子 ,我必须使用我的密钥运行Pageant来访问ssh类型的Git -repo在推到sf之前)

    对于纯CLI用例,您也可以使用惰性方式:create alias,它将在新命令中结合两次推送,并仅使用此命令从命令行推送,而不是"经典" [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 。对于我的样本中的repo,它可能类似于(没有错误检查的脏快速样本)

    hg push

    仅推送[alias] pushc = !hg push && hg push github