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

使用hg命令同时操作git和hg,git,version-control,mercurial,hg-git,Git,Version Control,Mercurial,Hg Git,我有一个mercurial存储库和一个git存储库。两者都使用相同的代码和相同的更改集 当我对hg存储库进行任何更改时,提交并将其推送到hg存储库,同样的更改也应该推送到git存储库。这可能吗?如何启用?在mercurial存储库上启用扩展hg git,并使用提交后和更改后组挂钩。在这些钩子中,推送到git存储库 编辑: 只需将hg git的非标准扩展(请参阅)放在某个地方,然后编辑您的.hgrc: [extensions] hggit = /path/to/hg-git/hggit [hook

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


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

在mercurial存储库上启用扩展hg git,并使用提交后和更改后组挂钩。在这些钩子中,推送到git存储库

编辑: 只需将hg git的非标准扩展(请参阅)放在某个地方,然后编辑您的.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/HOOK。

跟进飞机制造商的回答

  • 安装hg-git扩展
  • (为了简单起见,不是强制性的)将远程git repo添加到本地存储库的
    [path]
    部分
  • 手动推送至Git回购,获得成功推送结果
  • 在存储库
    hg push GIT
    [hooks]
    部分中创建传出钩子,其中GIT-来自
    [path]
    的GIT存储库的名称
  • 玩得开心
  • 最终注释和样本

    当心:回购中的传出挂钩在两种情况下触发:推送和捆绑。在使用bundle的情况下,对GIT的额外推送在repote GIT中不会有任何危险(更准确地说,是什么也不做,因为推送没有任何功能),但如果您想做到完美,您可以(在简单的if中)检查名为HG_SOURCE的环境变量的值,并且仅当它等于

    我真正的两个遥控器回购

    [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

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

    对于纯CLI用例,您还可以使用惰性方式:create,它将在new命令中组合两个push,并仅使用此命令从命令行进行push,而不是“classic”
    hg push
    。对于我的回购样本,它可以是(不带错误检查的快速脏样本)


    而对于push,只有
    hgpushc
    似乎才是有希望的。你能分享更多关于这方面的细节吗?我按照你的指示把所有东西都放在了.hgrc文件中。现在,当我提交代码并将其推送到hg存储库时,它只会被推送到hg存储库。它不会进入git。没有记录任何错误。有什么问题吗?对不起,但是1)我可以;t发现提交后类型的钩子2)本地存储库的changegroup钩子的想法是错误的-它在“从其他地方将一组变更集引入存储库后”激活,即在提交时|分解为本地repo,而不是推送到远程hg@LazyBadger:使用这两个钩子,post-commit和changegroup应该涵盖这两种情况,本地提交的变更集(提交后)以及来自另一个repo(变更组)的变更集。本质上,如果您总是只进行拉式提交或只希望进行本地提交,那么其中之一可能是不必要的。hgrc帮助中没有明确给出post-commit钩子,而是在“post”下进行了总结——“OP只想让手动(sic!)推送重复,您得到了:本地repo中的所有更改都已发布。”。另一种方法和坏主意(tm)我尝试了最后一种选择。当我使用
    hgpushc
    时,它在git上给我一个错误,如
    abort:error:nodename或servname提供,或未知
    我使用的是两个bitbucket存储库;一个是git,另一个是mercurial。现在,当我用在GitHub中创建的新repo来回复git repo url时,它对我起了作用。不确定比特桶中的git回购有什么问题。
    [alias]
    pushc = !hg push && hg push github