Mercurial中类似于git whatchanged的功能是什么?

4

我希望获得类似于Git命令的输出:

$ git whatchanged <old_rev>..<new_rev> --pretty=oneline --name-status

我看到hg outgoing可以帮助,但它的帮助页面中没有与修订版相关的信息: $ hg diff <old_rev>..<new_rev>可以给出不同之处,但输出是:
diff -r d3ed0d3eb928 -r 63329069147f hello.rb
--- a/hello.rb  Tue Jul 31 16:52:40 2012 +0530
+++ b/hello.rb  Wed Aug 01 11:15:33 2012 +0530
@@ -1,1 +1,1 @@
-print "Hello"
+print "Hello World"

我需要类似以下内容的东西:

bb3b9a6bc00b7203ab6491dbd062641fa60efb95 Fix for #4 and other small errors
M       .gitignore
A       config.ru
D       db/database.db
M       views/setup.haml
1c4ff29e5c7fc707c6fe314c060cd1935b300dd9 Added keyboard shortcuts and reload
M       README.md
A       public/javascript/keys.js
d0755d0b54cb4129fbf7730fe0bdf21a3996e224 Basic player completed
M       README.md
D       public/javascript/jquery-ui-1.8.21.custom.min.js
...

我用git whatchanged 1c4ff29e5c7fc707c6fe314c060cd1935b300dd9 bb3b9a6bc00b7203ab6491dbd062641fa60efb95 --pretty=oneline --name-status获取的信息。

3个回答

2
你可以尝试使用“changelog”样式。虽然它看起来并不完全相同,但它确实列出了被提交影响的文件,我认为这正是你想要的。示例:
hg log --style changelog
hg outgoing --style changelog

正如Christian所说,您可以使用模板将精确输出自定义到无限。有关更多信息,请参见hg help templating


我刚刚想出了这个丑陋的家伙:hg log -l 10 --template "{node}\n" | xargs -I{} echo 'hg log -r {} --template "{node} {desc|firstline}\n"; hg status --change {}' | bash - Laurens Holst

1
如果您正在寻找一种获取已更改文件的方法,但不太关心格式是否像git,那么我相当喜欢在通常打印差异的任何命令上使用diffstat开关。
# hg in --stat
# hg out --stat
# hg diff -r <old_rev>:<new_rev> --stat
... and a load more

这并不是完全相同的信息。它不是按照变更集,也没有说明文件是添加/修改/删除的,但另一方面它可以给出一些变更的范围的概念。


1

您可以使用hg log命令,并且使用模板自定义输出

例如:

hg log -r <old_rev>:<new_rev> --template "{node} {desc}\n{files}\n\n"

这将会看起来 类似 于你的Git示例。
文件列表看起来并不一样,没有换行符。

我自己从未尝试过,但是也可以使用 样式 自定义输出(类似于模板,但您可以在文件中保存样式,然后只需按名称引用它)。
有关此内容的文档位于我上面发布的相同链接底部。
显然,也可以在文件之间放置换行符(页面上有一个示例)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接