推送到两个无法互相访​​问的存储库

时间:2011-11-24 21:03:15

标签: mercurial push dvcs

设置:

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

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

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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

然后,您可以明确地推送到scustomer存储库:

hg push scustomer

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

你甚至可以使用存储库中的一个钩子自动推送到另一个,但你必须区分“手动”推送和钩子中的自动推送,我想这将是非常混乱

答案 1 :(得分:5)

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

答案 2 :(得分:3)

MultirepoExtension添加了在多个存储库上执行任何操作的命令。

或者你可以创建一个别名来推送到两者:

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

或者您可以创建推送到另一个的预推钩。类似的东西:

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

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