如何在mercurial中通过命令行获取所有已关闭的分支?

时间:2016-11-02 13:22:23

标签: command-line mercurial branch

在命令行中,我可以通过以下方式获得所有没有封闭分支的头:

hg heads

此外,我可以通过以下方式获得封闭分支的所有负责人:

hg heads --closed

但是,如何通过命令行知道所有已关闭的分支?

3 个答案:

答案 0 :(得分:4)

如果您对名称或md5感兴趣,可以使用:

hg branches --closed

答案 1 :(得分:2)

RTM hg help revsets

hg log -r "closed()"

样品:

>hg heads -T "{rev}:{node|short}\n"
9:caaade505e23
5:0c0ceaa4a8d2
3:3c58290b241d
1:99f7ad94a56f

>hg heads -c -T "{rev}:{node|short}\n"
10:fc7ddfb862bd
9:caaade505e23
5:0c0ceaa4a8d2
3:3c58290b241d
1:99f7ad94a56f

>hg log -r "closed()" -T "{rev}:{node|short}\n"
10:fc7ddfb862bd

所有封闭头的分支名称(主要用于命名分支)

hg log -r "closed()" -T "{branch}\n"

答案 2 :(得分:0)

hg branches --closed命令显示所有分支,并在行的末尾标有(closed)的闭合分支:

default                     3478:154d6861fb79
regression_plugins          3415:f2e42c49b8cf
wg2                         2531:a4b3ac405ea3
qt_gui_hack                 2289:6505224a780b
github_notice              39240:8808397a6c66 (closed)
bump_9.13                  39230:e2f33b5a9364 (closed)
visual_offset_bbox         39209:6565274172c6 (closed)
remove_x11                 39207:ba78ef512346 (closed)

因此,您可以使用grep:hg branches --closed | grep '(closed)$'将其范围缩小到仅封闭的分支:

github_notice              39240:8808397a6c66 (closed)
bump_9.13                  39230:e2f33b5a9364 (closed)
visual_offset_bbox         39209:6565274172c6 (closed)
remove_x11                 39207:ba78ef512346 (closed)

现在,如果只需要分支名称,则可以使用awk剥离更改集信息:

hg branches --closed | grep '(closed)$' | awk '{ print $1; }'

github_notice
bump_9.13
visual_offset_bbox
remove_x11

请注意,如果您的hg存储库在分支名称中使用空格,则需要格外注意。 (我不知道为什么他们允许这样做;在git中是不允许的。)

在这一点上,推荐hg log -r 'closed()' --template '{branch}\n'的其他答案相比之下看起来要优雅得多,但是在某些极端情况下,此命令是错误的。此命令将打印曾经关闭过的任何分支的名称,但是Mercurial允许通过再次提交来重新打开分支。因此,这会错误地将重新打开的分支标识为仍处于关闭状态(因为它正在检查所有提交,而不仅仅是分支头)。

啊哈!您可能会说,让我们使用hg log -r 'closed() and head()' --template '{branch}\n'仅打印具有闭合头的分支名称。当然,这可以解决问题,并且比传递给grep和sed / awk的管道还干净!但是,水银分支可以具有多个头,并且如果至少一个头是开放的,则认为该分支是开放的。该命令将声明分支具有闭合的头,即使它也具有打开的头。

当将一个大型且复杂的Mercurial存储库迁移到git并尝试删除所有已关闭的分支时,我很难学到这一点。我的脚本不断删除尚未关闭的分支,那是我发现这些极端情况的时候。