Mercurial:更好的命令行差异比较?

5

我想知道如何改进hg的diff命令。例如,假设我有以下代码:

line 1 
line 2
lin3 3

我将其修改为:

if($condition) {
   line 1
   line 2
   line 3
}

hg diff 用 "-" 表示原来的三行,用"+"表示新的五行。即使我运行 -wbB 以忽略空格和行更改,也是这样的。我知道它想告诉我什么,但难道它不能“更聪明”一点,意识到我只添加了两行(并提高了三行的级别)吗?

编辑: 有没有可能让 hg diff 告诉你添加了什么文本以及在哪里?而不是因为这些添加而导致的代码“结构”如何变化?

编辑2: 我正在运行Debian(Linux dev 2.6.26)和Mercurial 1.0.1。

谢谢


我可以问一下当前diff输出给你带来了什么困难吗?另外,知道你在哪个平台上运行Hg会有所帮助,因为工具可能会有所不同。 - Lazarus
mdiff(1)wdiff(1)在Ubuntu的wdiff软件包中,可能只是这个工具。 - sarnold
Lazarus,Faramir可能想要一个CLI工具,它可以像[xxdiff](http://furius.ca/xxdiff/doc/screenshots/xxdiff-snap-files2.html)一样聪明地处理细微的更改。 - sarnold
@Lazarus @sarnold 是对的。我只想要一个足够 "聪明" 的东西来检测到我添加到文件中的全部内容只有两行, if 语句和结束括号。但它却把整个代码块显示为已删除,然后再分别添加? - Faramir
如果它只呈现给你 if 和闭合括号,那么你会失去上下文,但这非常依赖于你对 diff 输出的使用。各有所好。 - Lazarus
2个回答

5
你看到这些变化是因为空格的改动被计算在内。如果你执行hg diff --ignore-space-change命令,你会看到以下类似内容:
+ if($condition) {
   line 1
   line 2
   line 3
+ }

这听起来像是你想要的。您还可以使用ExtDiff扩展调用@sarnold建议的任何备用diff程序。

另外,请考虑更新Mercurial。您的版本已经有三年了,当前的软件包是为Debian构建的。


由于某些原因,那对我不起作用。我正在使用包括那个的-wbB标志,即使我使用--ignore-space-change也没有任何效果! - Faramir

0

我对类似的东西很感兴趣,但最终我使用了DiffMerge(仅限Windows,但您可以在Debian上尝试Kdiff3)作为可视化差异工具来审查这样的更改:

enter image description here

遗憾的是,即使您使用其他工具生成所需形式的补丁,在存储库历史记录中它仍将以标准的Mercurial格式显示。


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