如何获得最接近包含除.hgtags之外的其他更改的给定修订版本?

mar*_*ark 2 version-control mercurial dvcs directed-acyclic-graphs

我有一个修订哈希键.我想获得包含任何内容的最接近的修订版,但是.hgtags.

例如,考虑Mercurial历史的以下片段:

D:\CI\NC\8.0>hg log -l3 -b 8.0 -v
changeset:   1768:633cf1f61665
branch:      8.0
tag:         tip
user:        ci
date:        Wed Nov 16 21:06:20 2011 +0200
files:       .hgtags
description:
Replaced tag 'good.NC.16' with 'rejected.NC.16' for changeset 9451e8f187b1


changeset:   1767:6cad328c622c
branch:      8.0
parent:      1765:9451e8f187b1
user:        ci
date:        Wed Nov 16 21:04:26 2011 +0200
files:       .hgtags
description:
Added tag 'good.NC.16' for changeset 9451e8f187b1


changeset:   1765:9451e8f187b1
branch:      8.0
tag:         rejected.NC.16
user:        gilad
date:        Tue Nov 15 18:26:09 2011 +0200
files:       .hgignore
description:
update
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果给定的修订版本是633cf1f61665,那么我正在寻找修订版本9451e8f187b1,因为它是最接近的版本,它不仅包含.hgtags,还包含其他内容.

如何,633cf1f61665我可以找到9451e8f187b1尽可能少的hg.exe调用?

编辑

我已经修复了输出,它应该显示来自同一分支的修订版.

EDIT2

我会尽力解释自己.让我们定义两个概念:

  • 一个沉闷的变更集 - 由hg tag行动创建的变更集.
  • 一个有趣的变化集 - 任何非沉闷的变更集.

所以,我的问题可以改写如下:

Given an arbitrary revision (dull or interesting) I need to find the closest
interesting revision belonging to the same named branch using as few hg invocations
as possible.
Run Code Online (Sandbox Code Playgroud)

例如,给定633cf1f616656cad328c622c9451e8f187b1所需的修订是9451e8f187b1.

Mar*_*ler 5

试试吧

$ hg log -r "max(::REV and not file(.hgtags))"
Run Code Online (Sandbox Code Playgroud)

看看那是否符合你的要求.有关hg help revsets查询语言的详细信息,请参阅.

如果您经常使用它,可以为此创建一个revset别名:

[revsetalias]
interesting($1) = max(::$1 and not file(.hgtags))
Run Code Online (Sandbox Code Playgroud)

然后hg log -r "interesting(123)"在将来使用.