Mercurial 如何获得在两个任意变更集之间修改的文件列表?
我唯一的猜测是这样可怕的事情:Mercurial 如何获得在两个任意变更集之间修改的文件列表?,mercurial,Mercurial,我唯一的猜测是这样可怕的事情: # files where something has been added hg diff -r AA -r BB|grep -- +++|cut -f1|cut -d/ -f2- >/tmp/ka # files where something has been removed hg diff -r AA -r BB|grep -- ---|cut -f1|cut -d/ -f2- >>/tmp/ka # filtering out "d
# files where something has been added
hg diff -r AA -r BB|grep -- +++|cut -f1|cut -d/ -f2- >/tmp/ka
# files where something has been removed
hg diff -r AA -r BB|grep -- ---|cut -f1|cut -d/ -f2- >>/tmp/ka
# filtering out "dev/null": it appears when a file is added or removed from the repository
sort -u /tmp/ka |grep -v dev/null
我需要的是在变更集AA和变更集BB之间修改的文件。类似于hg diff-r AA-r BB的东西
,但仅限于文件名,而不是整个diff
也许我没注意到有个反复无常的命令?我要检查的变更集不是连续的,否则我可以使用hg status
。
不是单个变更集的修改文件。
编辑:我需要这样做,因为我和一些来自青铜时代的程序员一起工作,他们不了解.diff是什么,请耐心听我说…
hg diff-r 182-r 193--stat
或
hg状态——版本182:193
解决方案一。基于差异的
>hg diff -r 3 -r 4 --stat
comments.php | 14 +++-----------
functions.php | 15 +++++++++++++--
header.php | 2 +-
readme.txt | 17 ++++++++++++++---
sidebar.php | 43 ++++---------------------------------------
style.css | 18 ++++++++++++------
6 files changed, 47 insertions(+), 62 deletions(-)
您可以通过将“|”字符灰显或(从我的POV中使用更好更好的方法)管道输出到gawk来获得更改后的文件,对于正好有4个字段的记录,打印$1
解决方案二。日志+模板+修订集
>hg log -r "3::4" --template "{file_mods}\n"
footer.php functions.php header.php search.php style.css
comments.php functions.php header.php readme.txt sidebar.php style.css
转换为列表,删除(可能的)重复项我将留给您当您想了解有关文件状态的信息时,要查找的基本命令是
hg status
。status命令是面向文件名的命令,您需要知道一些文件名
当你把它当作
$ hg status
$ hg status --rev AA:BB
然后将工作副本状态与工作副本父版本进行比较(
)。但如果你把它当作
$ hg status
$ hg status --rev AA:BB
然后它将显示在AA
和BB
之间修改的文件!无需进行放大、剪切、排序或模板
(我之前已经解释过了,请查看这些问题和答案以了解更多提示。)您可以在Ortoise Workbench中执行类似于
hg stat
的操作
最简单/最内置的方式是:
- 在修订的主列表中,单击/选择要比较的两个修订
- 右键单击其中一个
- 从关联菜单中,选择“视觉差异…”
生成有用文本输出的另一种方法是通过添加自定义工具,从THG Workbench自动使用
hg stat
- 文件菜单>设置
- 全局设置选项卡
- Leftnav>工具部分
- [新工具…]
- 输入如屏幕截图所示的详细信息:
- 单击“确定”
- 然后确保将“filecomp”工具添加到下拉列表中的至少一个GUI位置
- 重新启动THG
[tortoisehg-tools]
filecomp.command = hg stat --rev {REVID}
filecomp.enable = istrue
filecomp.label = FILECOMP
filecomp.showoutput = True
如果您在列表中选择了一个变更集,则宏{REVID}
将扩展为类似33a6bd983eab
的文本;如果您选择了两个,则宏33a6bd983eab+a41898ae15c4
将扩展为类似的文本,以此类推
在这种方法中,您实际上可以选择>2个变更集,它将报告它们之间的组合差异
还需要注意的是,
stat
有一种替代语法,可以列出任何两个变更集之间存在哪些文件差异,我认为其他答案中没有提到这些差异:
hg stat --rev A --rev B
其中A
和B
是变更集ID(看起来像1c845eefe22e
)
(您也可以使用修订号(如12345)代替变更集ID,但请注意,与ID不同,这些不是永久值)
A
和B
可以在任意两个分支上,也可以在同一个分支上,只要它们都存在于您正在使用的本地克隆中就无所谓。不能与-r一起使用,因为“-r--removed只显示删除的文件”-这是一个很难的UI失败。@asaddude:ups!对此很抱歉,我已将其改为使用--rev
。--rev
和-r
在我的系统上表现相同…这是2012年的一个错误吗?看起来它现在已经修复了,是的。相关:,尽管这个问题更一般。