在git中清理分支时,我一直在使用this之类的东西来区分旧/非活动分支和新/活动分支。
如何根据Mercurial中的修改时间对所有分支进行排序?
答案 0 :(得分:1)
分支的概念在Mercurial与Git中完全不同,这使得这有点棘手。取决于你真正想要的东西,"棘手"可能是它变得完全无足轻重!
从hg heads
开始,显示所有头部(有关头部定义,请参阅hg help heads
)。每个头都是一个提交,因此:
它还在您的存储库中有一个本地修订号,它不一定与某个具有相同提交的克隆中的修订号相匹配。那就是:
$ hg heads
changeset: 5:5f5df3fc4f1c
某些克隆中的变更集5f5df3fc4f1c
可能是4:5f5df3fc4f1c
或100:5f5df3fc4f1c
或其中一些。冒号前面的数字是本地修订号。
现在,提交中的日期取决于创建提交的计算机,因此它们可能非常错误。在向Mercurial存储库添加提交时,将按顺序分配本地修订号,但如果本地修订号为更高,则表示您引入了提交后。 (警告:这可能是#34;比实际制作时间晚了很长时间#34;如果你现在刚刚从一个旧的,不活跃但从未合并过的克隆中提出新的提交。)
从这个意义上说,hg heads
的输出(默认以反向本地编号顺序显示)已经按照您可能想要的顺序(或者相反)它)。稍后打印的东西“不太活跃”#34;所以除了阅读hg heads
的输出之外,可能没有其他工作要做(并检查某个分支中是否有多个头)。
1 这与Git的不同之处在于,在Git中, tip commit 是一些refs/heads/
名称指向的提交。该提示定义分支,但该提交可以在多个分支中!在Mercurial意义上,提示必然是一个头, 2 但是只有一个这样的头,因为它是分支的名称所在从而定义了head / tip提交,每个名称只标识一次提交。
2 除非,您的意思是hg heads --topo
,在这种情况下,由refs/heads/name
标识的Git提交可能根本不是一个头:
...--o--* <-- refs/heads/midpoint
\
o--● <-- refs/heads/tip
refs/heads/tip
标识的提交是拓扑头,而refs/heads/midpoint
标识的提交则不是。在Git中,midpoint
提交在两个分支上。
如果您确实需要不同的排序,那就更难了:您必须使用hg heads
而不是hg log
而使用修订说明符。请注意,-r "head() and not closed()"
生成的输出与hg heads
相同,因此您可以从中开始。 hg log
的输出按您选择的顺序排序,但默认为相同的local-numeric-revision排序。有关详情,请参阅hg help revisions
。