Mercurial有一种称为revsets的特定于域的语言,允许用户指定修订集.
例如,您可能希望列出尚未合并到分支中的补丁default:
hg log -r "all() - ancestors('default')"
Run Code Online (Sandbox Code Playgroud)
作为一个更复杂的示例,上面的链接给出了在标记1.3的修订版本和标记的修订版本之间列出变更集的示例,1.5其中提到"bug"并影响目录中的文件hgext:
hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"
Run Code Online (Sandbox Code Playgroud)
revset语言非常丰富,允许根据日期,用户名,提交消息,是否存在特定远程位置的提交等来选择变更集.
git是否具有用于查询变更集的等效机制,无论是在核心程序中还是作为扩展可用?
在我的存储库中,我有表单的标签version-1.2.3.我想制作一个new()像这样调用的revset别名:
hg log -r 'new(1.2.3, 1.2.4)'
Run Code Online (Sandbox Code Playgroud)
......并扩展到:
hg log -r '::version-1.2.4 - ::version-1.2.3' # What's new in 1.2.4?
Run Code Online (Sandbox Code Playgroud)
当我试图这样做时:
[revsetalias]
new($1, $2) = ::version-$2 - ::version-$1
Run Code Online (Sandbox Code Playgroud)
... Mercurial将其解释为从修订中减去修订$2(例如1.2.3)version,这不是我的意图.
我也试过这个,使用##连接运算符:
new($1, $2) = ::"version-" ## $2 - ::"version-" ## $1
Run Code Online (Sandbox Code Playgroud)
但后来hg log -r 'new(1.2.3, 1.2.4)'给了我这个错误:
hg: parse error at 13: syntax error
Run Code Online (Sandbox Code Playgroud)
我也尝试使用ancestors()而不是::语法,但仍然有语法错误.这可能吗?