【问题标题】:How to tell if a merge is needed after a pull in Mercurial?如何判断拉入 Mercurial 后是否需要合并?
【发布时间】:2012-04-24 12:11:19
【问题描述】:

我有一个单头存储库的克隆,既美观又简单。在引入其他人的更改后,我有一个脚本来计算人头以查看是否需要合并。但是如果对方做了一个分支并合并它,“hg head”显示两个头,脚本认为它必须合并。真正的测试应该是什么?

之前:

0 - 1

之后:

0 - 1 - 2 - 3
    \  /
     4 (branch)

这不需要合并。但简单比较前后正面的数量会表明它确实如此。为什么 Mercurial 在这种情况下甚至会显示不止一个头像?

【问题讨论】:

  • “hg heads default”不会只显示默认分支上的头像吗?

标签: mercurial branch head


【解决方案1】:

而不是调用hg heads 调用hg heads --topo,它只显示拓扑 头——那些没有孩子的头。您会看到他们合并分支的头部,但由于它已合并,因此它不是拓扑头部,--topo 将抑制它。

【讨论】:

  • 不,理解“head”并不意味着“没有孩子”,而是意味着“在同一个命名分支中没有孩子”很重要,尤其是在您使用 revsets 时。
【解决方案2】:

如果您的分支名称中没有空格,则可以使用此脚本:

#!/bin/sh

for b in $(hg branches -q); do
    h=$(hg heads --template "." $b)
    if test ${#h} -gt 1; then
        echo "Branch $b needs merging, it has ${#h} heads"
    fi
done

它遍历每个打开的分支并计算其上的正面数。

【讨论】:

  • 如果 stackoverflow 允许标记两个答案,我也会接受这个。就我而言,我只需测试默认分支就可以逃脱,因此代码甚至不再存在。这也适用于 --topo 之前的旧版本。
  • 这让我走上了正确的道路,我现在想看看hg heads . 说什么。像 OP 一样,我总是在默认分支上......目前,但这可能有一天会改变。这里的. 与@Martin 传递给--template 开关的含义不同。
【解决方案3】:

您可以在拉取之前克隆您的 repo,然后使用 --new-branch 推送到克隆中。如果这抱怨新的头,你需要合并。

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2021-10-17
    • 2017-09-01
    • 2010-11-25
    相关资源
    最近更新 更多