Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git与Mercurial Revset的等价物是什么?_Git_Mercurial_Mercurial Revsets - Fatal编程技术网

git与Mercurial Revset的等价物是什么?

git与Mercurial Revset的等价物是什么?,git,mercurial,mercurial-revsets,Git,Mercurial,Mercurial Revsets,Mercurial有一种特定于域的语言,名为,允许用户指定修订集 例如,您可能希望列出尚未合并到分支default中的修补程序: hg log -r "all() - ancestors('default')" 作为一个更复杂的示例,上面的链接给出了一个示例,列出了标记为1.3的修订版和标记为1.5的修订版之间的变更集,其中提到了“bug”,并影响目录hgext中的文件: hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')" re

Mercurial有一种特定于域的语言,名为,允许用户指定修订集

例如,您可能希望列出尚未合并到分支
default
中的修补程序:

hg log -r "all() - ancestors('default')"
作为一个更复杂的示例,上面的链接给出了一个示例,列出了标记为
1.3
的修订版和标记为
1.5
的修订版之间的变更集,其中提到了“bug”,并影响目录
hgext
中的文件:

hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"
revset语言非常丰富,允许根据日期、用户名、提交消息、提交是否存在于特定远程位置等选择变更集


git是否具有用于查询变更集的等效机制,无论是在核心程序中还是作为扩展提供?

要列出除默认主分支之外的所有提交,就像我假设第一个示例所做的那样:

git log --all --not master
要获得与第二个示例大致相同的结果,请执行以下操作:

git log 1.3...1.5 --grep="bug" -- hgext

语言有很大的不同,但是在git中生成修订列表的一般命令是
git rev list
。大多数git命令都使用它(或者直接通过在access中编译,或者作为命令调用它,因为它们本身就是shell脚本)。如果仅使用
git rev list
是不够的,您可以编写shell脚本来读取其输出,为其提供输入,等等。@torek:使用
revset
的目的是因为我厌倦了编写shell脚本
:)
git rev list
看起来至少提供了
revset
的一些功能。你会考虑把你的评论作为一个答案,也许是对这两个问题的快速比较?恐怕比较起来会很长,而且我对HG翻版的行为不太熟悉(例如,我对HG和Git之间的边界条件差异感到惊讶)。所以我有点犹豫不决:-)你有什么特别的东西需要帮助编写脚本吗?@davidg,虽然我希望你好运地实现这一点,但我首先意识到你似乎是地球上第一个想要这类东西的人。我的意思是,Git周围有一群高效的黑客,但还没有人想实现这样的功能。对我来说,这意味着采用现有的方法来解决这个问题可能更好,即使他们现在觉得不如你从Mecrurial中学到的。谢谢你的想法。你的回答确实解决了我给出的具体例子,但不是我所希望的一般解决方案。我真的希望有一个插件/扩展,提供一个DSL,用于指定类似于Mercurial的revsets DSL的修订。打个比方,您已经使用
grep
解决了我的示例,而我真正想要的是SQL。目前git似乎还不存在这样的DSL,但我将保留这个问题,以防将来发生变化。(我应该给出更有趣的例子;
谓词嵌套时,
grep
开始崩溃)。我理解这个问题,但是,可以将多个grep参数添加到git log中,每个grep参数就像一个or子句,假设您想要匹配字符串“Create”或字符串“add”对于受影响的文件或文件夹,可以运行
git log--grep“Create”--grep“Add”
,只需在--参数后添加要包含的文件/文件夹即可。