【问题标题】:How to detect that commits are pushable如何检测提交是可推送的
【发布时间】:2012-01-06 08:04:18
【问题描述】:

在 Git 中这很容易,因为 remote/branch 指向的提交与 branch 不同。如何用 Mercurial 做到这一点?

【问题讨论】:

  • 您在寻找hg outgoing吗?

标签: mercurial push commit


【解决方案1】:

如果您的意思是查看本地存储库与您推送的存储库之间的不同之处,请尝试

hg outgoing

【讨论】:

  • 但是,如果存储库脱机或丢失,这将不起作用。
【解决方案2】:

从 Mercurial 2.1 开始,还有一个纯本地解决方案:阶段draft 阶段可能是您正在寻找的。详情请参考:

https://www.mercurial-scm.org/wiki/Phases

您可能会觉得hg phase <rev>hg log -r "draft()" 很有趣。

【讨论】:

  • draft 阶段显示所有修订的命令行调用是什么?
  • 请注意,如果您与多个遥控器交互,阶段将无济于事。一旦一个变更集被共享,它就会被标记为公开,所以传出是确定另一个遥控器缺少什么的唯一方法。
【解决方案3】:

remotebranch extension 可以为您提供类似 Git 的设置。它跟踪[paths] 中列出的存储库的远程头,并将它们公开为名为@9​​87654323@ 的标签。这可以让你运行

$ hg diff -r foo/default

查看自foo 存储库中的default 分支以来发生了什么变化。还有新的 revset 关键字可以让你做类似的事情

$ hg log -r "not pushed()"

得到什么

$ hg outgoing

可以,但是没有任何网络流量。

【讨论】:

    【解决方案4】:

    在草稿阶段显示所有修订的命令行调用是什么?

    hg log --style phases
    

    这将显示日志+阶段,因为Mercurial 2.7 (2013-08-01)

    【讨论】:

      【解决方案5】:

      我会按照其他人的建议使用hg outgoing,但hg summary 也会告诉你。它可能需要--remote 选项来检查远程默认服务器。

      【讨论】:

        【解决方案6】:

        如果您需要选择变更集进行进一步处理,那么您可以使用outgoingrevset predicate。这使您可以将hg outgoing 重新实现为

        hg log -r "outgoing()"
        

        但真正的好处是您可以在其他情况下使用它,例如

        hg strip "outgoing()"
        

        【讨论】:

          猜你喜欢
          • 2012-03-14
          • 2020-12-18
          • 1970-01-01
          • 2013-12-11
          • 1970-01-01
          • 2017-12-22
          • 2021-07-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多