0

这个问题不是hg log 的重复 - 如何获取最后 5 个日志条目?- 很容易应用限制。问题是日志输出,当受限时,似乎并不总是按日志日期降序排列 - 行为会随着添加 revset 而改变。

例如,简单日志“按预期”工作,它显示最新的五个日志条目。

hg log -l5

但是,当使用 revset 时,结果首先是最旧的节点(如未观察到的那样-l);因此,以下显示了不希望出现的最旧的五个条目。

hg log -r "user('Me')" -l5

如何hg log使用 revset 指示按日志日期降序(“如预期”)排序,以便限制具有可预测的1和有意义的效果?


$ hg --version
Mercurial Distributed SCM (version 3.6.1)

1我不考虑在可预测的 rev集中reverse抛出随机调用,但如果这是“最好”的方式..

4

2 回答 2

1

你有几个选择。

首先,您可以reverse()与现有的 revset 结合使用,例如:

hg log -r 'reverse(user("me"))' -l 5

作为简写,您还可以使用-for --follow,当与 - 一起使用时-r- 会将修订包含在reverse(...). 例子:

hg log -f -r 'user("me")' -l 5

或者您可以对变更集中的限制进行编码,例如:

hg log -r 'last(user("me"), 5)'

请注意,修订集别名对于避免一遍又一遍地输入修订集很有用。所以,你可以把这样的东西放在你的.hgrc

[revsetalias]
lastby($1) = last(user($1), 5)

然后做:

hg log -r 'lastby("me")`
于 2015-12-24T18:29:40.057 回答
0

重要附录答案:不要盲目reverse使用此任务。虽然它在许多情况下都可以使用,但更好/可靠的通用解决方案是使用sort,如:

hg log -r 'sort(user("me"), "-date")' -l 5

这是因为reverse 不保证源集顺序是有序的- 因此它仍然可能导致最终输出符合请求的“最新”标准。

使用sort上述保证行为,因为它按日期排序,降序,然后选择每个 hg 日志的限制选项的前 5 个。

(否则,请参阅 Reimer 的回答。)

于 2016-01-07T06:37:19.583 回答