2012-04-24 72 views
4

我有一个仓库的克隆有一个头,很好,很简单。引入其他人的更改后,我有一个脚本来计算头部以查看是否需要合并。但是如果另一个人成立了一个分支并合并了它,“hg heads”就会显示出两个头,脚本认为它必须合并。测试真的应该是什么?如何判断Mercurial拉出后是否需要合并?

前:

0 - 1 

后:

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

这并不需要合并。但是,前后头部数量的简单比较将表明它的确存在。为什么Mercurial在这种情况下甚至会显示多个头?

+1

“hg heads default”不会显示默认分支上的头像吗? – 2012-04-24 12:51:28

+0

是的,那是有效的。 – 2012-04-25 09:51:42

回答

4

而不是打电话hg heads致电hg heads --topo其中只显示拓扑头 - 那些没有孩子。你看到了他们合并分支的头,但是因为它被合并在它不是一个拓扑头部,并且会压制它。

+0

非常好!这是一种“正常工作”的标志! – 2012-04-25 09:44:34

+1

但是,理解“头”并不意味着“没有孩子”,而是意味着“在同一个分支中没有孩子”是很重要的,特别是如果你使用的是修订版。 – 2012-04-25 13:17:00

0

您可以在拉动之前克隆您的回购,然后用--new-branch推入克隆。如果抱怨新的头像,你需要合并。

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 

它遍历每个打开的分支和计算就可以了磁头的数量。

+1

如果stackoverflow允许两个答案被标记,我也会接受这个答案。在我的情况下,我只能测试默认分支,所以代码甚至不再存在。这适用于比--topo更老的版本。 – 2012-04-25 09:48:00

+0

这让我走上了正确的道路,我现在认为这是看到'hg head。'说的。就像OP一样,我总是在默认分支上......此刻,但有一天可能会改变。这里的'.'与@Martin传递给模板开关的意义不同。 – 2017-10-20 22:17:34