按修改时间对hg分支进行排序

时间:2018-03-21 16:14:27

标签: mercurial

在git中清理分支时,我一直在使用this之类的东西来区分旧/非活动分支和新/活动分支。

如何根据Mercurial中的修改时间对所有分支进行排序?

1 个答案:

答案 0 :(得分:1)

分支的概念在Mercurial与Git中完全不同,这使得这有点棘手。取决于你真正想要的东西,"棘手"可能是它变得完全无足轻重!

hg heads开始,显示所有头部(有关头部定义,请参阅hg help heads)。每个头都是一个提交,因此:

  • 有一个ID;
  • 位于一个特定的分支中; 1
  • 有一个日期戳。

它还在您的存储库中有一个本地修订号,它不一定与某个具有相同提交的克隆中的修订号相匹配。那就是:

$ hg heads
changeset:   5:5f5df3fc4f1c

某些克隆中的变更集5f5df3fc4f1c可能是4:5f5df3fc4f1c100: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