如何快速推送Mercurial

时间:2011-05-26 01:04:11

标签: mercurial

在我的本地仓库发生更改后,我使用hg commit -m <message>提交,然后使用hg push推送到我的服务器,然后在我的服务器中使用hg update更新工作目录。

有更好的方法吗?

3 个答案:

答案 0 :(得分:9)

您描述的前两个步骤:

hg commit -m <message>
hg push

是必需的,因为提交与Mercurial(以及大多数其他DVCS)中的服务器完全分开。你可以编写一个post-commit钩子来在每次提交后执行push,但是不建议这样做,因为它可以防止你在提交期间和推送之前纠正简单的错误。

因为您正在尝试对“服务器”执行更新,所以我假设您正在服务器上的存储库中执行代码版本。我假设这是因为通常服务器只是作为主存储库,供您和您的开发人员访问(并且还要受备份等等),并且不需要显式的hg update

假设您正在服务器上执行代码,您可以尝试使用此命令替换推送和更新:

hg pull <path to development repo> -u

将从您的本地仓库执行拉动,然后自动更新。根据您的服务器配置,可能很难获得本地存储库的路径。

答案 1 :(得分:6)

对于问题的第一部分(即,在提交时自动推送),您可以使用此答案中描述的技巧:mercurial automatic push on every commit

如果要自动更新工作目录,可以使用挂钩来执行此操作。将其添加到存储库的hgrc(服务器目录中为.hg/hgrc):

[hooks]
changegroup = hg update >&2

每次推送到此服务器时,这将自动更新工作目录。这个钩子在Mercurial FAQ

中描述

如果您使用这两个解决方案,则下次执行hg commit -m "message"时,提交将自动推送到远程服务器,服务器上的工作目录将会更新。

答案 2 :(得分:2)

您可能会发现一个名为autosync的扩展程序:

  

此扩展提供autosync命令,该命令自动且持续地提交工作副本更改,从另一个存储库提取(提取,合并,提交)更改并将本地更改推送回另一个存储库。将配置文件或待办事项列表视为要同步的事物的示例。在更高级别上,autosync命令不仅会同步存储库,还会同步工作副本。必须将中央存储库(通常没有工作副本)用作同步集线器: