【问题标题】:Push to two repositories that can't reach each other推送到无法相互访问的两个存储库
【发布时间】:2011-11-24 21:03:15
【问题描述】:

设置:

  • 笔记本电脑 L
  • 托管各种存储库 SOffice 的办公服务器
  • 客户的数据库服务器 SCustomer

我正在为一位客户在 L 上编写代码,并且经常希望将其推送到 SOffice 和 SCustomer。

我知道我可以使用 changegroup 挂钩从第二个存储库推送到第三个存储库(如 in this answer 所述),但这要求第二个可以通过网络到达第三个存储库。

在我的情况下,每个都在防火墙后面,只有我的笔记本电脑通常通过 VPN 访问(或通过物理访问)。我可以在 SOffice 上设置 VPN 以访问 SCustomer,但我不想这样做。

有没有办法可以将default 设置为两个 存储库?

【问题讨论】:

    标签: mercurial push dvcs


    【解决方案1】:

    您不能default 到两个存储库,但您可以在hgrc 文件中定义多个存储库:

    [paths]
    default= /path/to/first/repo
    scustomer = /path/to/second/repo
    

    然后您可以显式推送到scustomer 存储库:

    hg push scustomer
    

    如果你想自动同时推送到两个存储库,我不知道有一种 Mercurial 方法可以做到这一点,但是创建一个 shell 脚本、别名或其他东西来运行这两个命令真的很容易一个接一个。

    您甚至可以使用存储库上的挂钩自动推送到另一个,但是您必须区分“手动”推送和挂钩中的自动推送,我想这会很混乱.

    【讨论】:

    • 我应该澄清一下,我知道我可以在hgrc 中设置多个推送位置。
    • 那你应该看看@Ry4an给出的扩展,它似乎正是你要找的。​​span>
    【解决方案2】:

    您能否使用自动推送到两个外部存储库的钩子创建存储库的第二个克隆?然后从您的工作克隆推送到第二个克隆。

    【讨论】:

      【解决方案3】:

      有一个MultirepoExtension 添加了对多个存储库执行任何操作的命令。

      或者您可以创建一个别名来推送到两者,例如:

      [aliases]
      pushboth = !$HG push http://first ; $HG push http://second
      

      或者您可以创建一个推送到另一个的预推送挂钩。比如:

      [hooks]
      pre-push = hg push http://second
      

      但我最喜欢(并赞成)krtek 的回答。只需给每个路径别名,然后使用短名称而不是 URL 运行 push 两次。

      【讨论】:

      • 钩子不会造成某种无限循环吗?第二次推送不会触发钩子吗?顺便说一句,谢谢你的扩展,我不知道
      • 是的,您需要进行测试以确保它仅在推送到第一个时触发。我会坚持两次运行推送,而不是尝试自动化它的建议。在你的工作流程中加入这样的小捷径只会让你在没有它们的系统上感到恼火,而当它们有你没有预料到的副作用时会感到困惑。
      • 扩展以及 pushbo 命令别名可能带有无法从 TorgoiseHg Workbench 轻松/直接控制的问题;我很好,但我也在为非开发人员寻找一个相对方便的解决方案。不过,这些是最接近的。
      猜你喜欢
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 2021-06-11
      • 2021-11-27
      相关资源
      最近更新 更多