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
Mercurial 如何获得在两个任意变更集之间修改的文件列表?_Mercurial - Fatal编程技术网

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
的操作


最简单/最内置的方式是:

  • 在修订的主列表中,单击/选择要比较的两个修订
  • 右键单击其中一个
  • 从关联菜单中,选择“视觉差异…”
这将生成一个类似以下示例的窗口:

(然后单击[X])

此屏幕的使用可能有限,但是。。。例如,除了截图,你不能轻易地导出它。但是,您可以逐个复制/粘贴各行的文本


生成有用文本输出的另一种方法是通过添加自定义工具,从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年的一个错误吗?看起来它现在已经修复了,是的。相关:,尽管这个问题更一般。