Mercurial:列出“hg diff”文件

时间:2012-03-26 15:05:41

标签: 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 "dev/null": it appears when a file is added or removed from the repository
sort -u /tmp/ka |grep -v dev/null

也许有一个我没注意到的善变命令?

<小时/> 单个变更集的已修改文件。
编辑:我需要这样做,因为我正在与一些青铜时代的程序员合作,他们不明白.diff是什么,请耐心等待...

4 个答案:

答案 0 :(得分:32)

hg diff -r 182 -r 193 --stat

hg status --rev 182:193

答案 1 :(得分:8)

当您想要了解文件状态时,要查找的基本命令是hg status。 status命令是文件名导向命令,您想知道一些文件名。

当您将其作为

运行时
$ hg status

然后它将工作副本状态与工作副本父修订(.)进行比较。但是如果你把它作为

运行
$ hg status --rev AA:BB

然后它会显示在AABB之间修改的文件!无需打褶,切割,分类或模板。

(我在hereherehere之前对此进行了解释,请参阅这些问题和答案以获取更多提示。)

答案 2 :(得分:0)

解决方案一。 DIFF-基于

>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(-)

你可以通过点击“|”来获取更改的文件char,或(从我的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

转换为列表,删除(可能)重复项,我将为您留下

答案 3 :(得分:0)

您可以在Tortoise Workbench中执行类似于hg stat 的操作


最简单/最内置的方法是

  • 在修订的主列表中,单击/选择要比较的两个
  • 右键单击其中之一
  • 从上下文菜单中,选择“ Visual Diff ...”

这将产生一个类似于以下示例的窗口:

enter image description here

(然后单击[X])。

此屏幕可能用途有限,例如,除了拍摄屏幕截图之外,您无法随时将其导出。但是,您可以一对一地复制/粘贴单个行的文本。


产生有用文本输出的另一种方式是通过添加自定义工具来自动使用THG Workbench中的hg stat

  • “文件”菜单>“设置”
  • “全局设置”标签
  • 左侧导航>工具部分
  • [新工具...]
  • 输入详细信息,如屏幕截图所示:

enter image description here

  • 点击确定
  • 然后确保将“ 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

其中AB是变更集ID(看起来像1c845eefe22e)。

(您也可以使用修订号,例如12345来代替变更集ID,但请注意,与ID不同,它们不是永久值)。

AB可以在任何两个分支上,也可以在同一分支上,只要两个都存在于您正在使用的本地克隆中就没关系。