【发布时间】:2014-03-20 00:00:00
【问题描述】:
Mercurial 有一种名为 revsets 的特定领域语言,允许用户指定修订集。
例如,您可能希望列出尚未合并到分支default 中的补丁:
hg log -r "all() - ancestors('default')"
作为一个更复杂的示例,上面的链接给出了列出标记为 1.3 的修订版和标记为 1.5 的修订版之间的变更集的示例,其中提到了“错误”并影响了目录 hgext 中的文件:
hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"
revset 语言非常丰富,允许根据日期、用户名、提交消息、提交是否存在于特定远程位置等来选择变更集。
git 是否有等效的机制来查询变更集,无论是在核心程序中还是作为扩展提供?
【问题讨论】:
-
语言完全不同,但 git 中用于生成修订列表的一般命令是
git rev-list。大多数 git 命令都使用它(或者直接通过编译访问,或者通过调用它作为命令,因为它们本身就是 shell 脚本)。如果仅git rev-list不够用,您可以编写读取其输出、提供输入等的 shell 脚本。 -
@torek:使用
revsets的意义在于我厌倦了编写shell 脚本:)。git rev-list看起来至少提供了revsets的部分功能。您是否会考虑将您的评论作为答案,或许可以对两者进行快速比较? -
恐怕比较会变得很长并且我对 hg revsets 的行为不太熟悉(我一直对 hg 和例如 git),所以我有点犹豫 :-)
-
您有什么具体的需要帮助编写脚本的吗?
-
@davidg,虽然我祝你好运实现这一点,但我首先考虑你似乎是地球上第一个想要这种东西的人。我的意思是,在 Git 周围有一群高效的黑客,但还没有人想实现这样的功能。对我来说,这意味着最好只采用解决问题的方法,即使他们目前觉得不如你在 Mecrurial 中学到的方法。
标签: git mercurial mercurial-revsets