【问题标题】:mercurial windows batch file for pulling changes to multiple repositories用于将更改拉到多个存储库的 mercurial windows 批处理文件
【发布时间】:2009-05-26 00:16:24
【问题描述】:

我是 Windows 上的一个 mercurial 用户,我正在尝试编写一个批处理文件来检查对存储在一个公共文件夹中的多个存储库的传入更改(即主文件夹下可能有 10 个左右小的 mercurial 存储库) .我有以下批处理文件,它成功地遍历了多个存储库并运行 hg 传入。但是,当找到具有远程更改的存储库时,我似乎无法让它执行 hg -pull -u 。

   FOR /D /r %%G in (".hg*") DO (
    @echo Processing: %%G
    cd /d %%G\.. 
    hg incoming
    IF NOT ERRORLEVEL 0 (
        echo Pulling changes from the server
        hg pull -u
    )
    cd..
    )

我很确定问题出在 If 语句上。 hg 传入似乎没有可以由 ERRORLEVEL 解释的返回值。这是正确的方法还是我应该改用 python?

【问题讨论】:

  • 我最终创建了两个批处理文件。一个执行 hg pull,另一个执行 hg update。这似乎是最安全的解决方案,因为 hg pull 的输出指示是否需要合并 repo 或可以简单地更新。感谢大家的回复。

标签: windows mercurial batch-file


【解决方案1】:

hg incominghg outgoing 的退出代码是 1(如果没有传入/传出变更集)和 0 否则,这意味着您的测试是倒退的。 (自提出此问题以来,退出代码已记录在案,现在可以在 hg help incominghg help outgoing 中找到。)

另外,同时使用hg incominghg pull 会完成两次工作:您应该简单地使用hg pullhg incoming 的帮助说:

对于远程存储库,使用--bundle 可以避免下载 如果传入后跟随拉动,则更改集两次。

因此,您实际上下载了所有变更集两次,使用了两倍的带宽。

【讨论】:

  • 我的印象是 hg 传入和传出只是对将被拉/推的内容的预览,而不是实际拉动所有更改集。如果我理解正确,hg 传入会抓取变更集并在完成时丢弃它们?如果是这种情况,那么简单地使用 hg pull -u 就足够了。
  • 是的,我同意,'hg incoming' 应该只是快速获取元数据(作者、提交消息等)而不是实际数据。我对代码的那部分不够熟悉,无法说明为什么要这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
相关资源
最近更新 更多