在命令行中,我可以通过以下方式获得所有没有封闭分支的头:
hg heads
此外,我可以通过以下方式获得封闭分支的所有负责人:
hg heads --closed
但是,如何通过命令行知道所有已关闭的分支?
答案 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并尝试删除所有已关闭的分支时,我很难学到这一点。我的脚本不断删除尚未关闭的分支,那是我发现这些极端情况的时候。