hg log只能显示给定修订版的祖先吗?

时间:2010-10-07 13:50:16

标签: mercurial

我真的很想念从svn转移到mercurial的一件事是mercurial的hg log命令坚持显示所有历史记录而不仅仅是我当前工作修订版的历史记录。

例如,我正在为我的分支机构中的另一个负责人处理一个包含大量签到的仓库,前20个日志条目与我的开发线无关。

hg log有很多选项,但是......
--rev显示要求的修订而不是其祖先
- 分支不起作用,因为主动头与我的分支在同一分支中 --prune删除了另一个头的所有祖先,即使他们也是我的祖先 --user不起作用,因为我不是这个开发项目中唯一的用户

我想我可能会脱衣服,但这看起来有点过分......

思考?
莱恩

3 个答案:

答案 0 :(得分:22)

如果你有Mercurial 1.6或更高版本,你可以使用revsets来执行此操作:

hg log --rev "ancestors(.)"
hg log --rev "reverse(ancestors(.))"  # Output in the same order as vanilla hg log

答案 1 :(得分:18)

我知道版本集现在风靡一时(hg log -r "::."),但鲜为人知的--follow标志可让您使用任何版本的Mercurial执行您想要的操作。 hg log help说(我粗略强调):

  

[...]使用带有文件名的-f/--follow来跟踪重命名和历史记录   副本。没有文件名的 --follow只会显示祖先或   起始修订版的后代。 [...]

     

如果未指定修订范围,则默认为提示:0 ,除非--follow为   set,在这种情况下,工作目录parent用作起始   修订。 [...]

因此,换句话说,添加-f将为您提供帮助。您可以将-f添加到默认值:

[defaults]
log = -f

或者更好的是,您可以为此创建一个别名:

[alias]
logf = log -f

这可以避免更改像hg log这样的核心命令,这可能会让您或您的同事迟早感到困惑。

答案 2 :(得分:1)

正如Niall C所说,你可以使用revsets从命令行执行此操作:

hg log --rev "ancestors(.)"

此外,如果你有TortoiseHg,你可以使用标有“All”,“Tagged”,“Ancestry”,“Parents”,“Heads”,“Merges”等的单选按钮过滤Repository Explorer中的修订图。就在你的历史之上。在这种情况下,您将选择您感兴趣的祖先的修订版,然后选择“Ancestry”选项。