如何使用“ diff”命令获得最大收益?


9

diff过去,我尝试使用linux 命令时没有多大的运气或耐心。我通常最终会使用GUI工具,例如DiffMerge或Kdiff。

最近,我开始尝试diff再次使用它通过ssh比较远程系统上的文件,并且我发现该-y / --side-by-side选项非常有用,但是我仍然觉得我没有充分利用此实用程序。

所以我很好奇如何实现以下目标:

  1. 突出显示更改或使用颜色编码使输出更具可读性
  2. 合并-选择具有差异的行并将更改生效到文件之一

此外,在谷歌搜索时,我还没有找到很多很好的例子,因此,如果您有一些Linux-fu的秘密,可以最大程度地利用diff,请分享一下吗?我将主要比较基于文本的配置文件,但是任何技巧都将是很棒的。

供参考 -DiffMerge实用程序可以轻松地将更改与颜色突出显示并排显示。顶部的图标可让您在“显示全部”,“显示差异”和“根据上下文显示差异”的视图之间切换。在命令提示符下喜欢其中一些功能。

ps:我还应该注意,我发现另一种非常有用的选择是--suppress-common-lines我在这篇简洁易读的博客文章中了解到


3
我使用vimdiff了很多。
nicerobot 2011年

@nicerobot您可以将其发布为答案-这是一个非常有用的工具。
rozcietrzewiacz 2011年

你不能,它是免费的.....抱歉不能帮助它:D
whoami

我大部分时间都在Emacs中进行比较。
吉尔(Gilles)“所以,别再邪恶了”,

@whoami-什么?
cwd

Answers:


9

没有特别的顺序:

  • meld 是一个非常好的diff程序,它执行非常好的diff和三向合并。
  • git config --global merge.conflictstyle diff3可为您提供三路合并输出,以与之类的工具配合使用meld
  • wdiff单词比较,如果有颜色很好:wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" ...
  • 为了尽量减少diff输出中的杂物,我通常使用--ignore-all-space-w)选项
  • diff-ignore-moved-lines*按照标签上的说明进行操作。
  • difff*可用于仅比较在给定字段中匹配的行。

*免责声明:我是作者,并开发了这些工具,以帮助CLI和GUI进行差异化和合并。


1
我也用了diffuse很多。
Arcege

我发现diff -u也相当简单。
gabe。


3

要使差异着色,您应该查看http://colordiff.sourceforge.net/。这只是diff的包装,因此,所有命令选项仍然有效。

如果您有ubuntu,只需写:

    # sudo apt-get install colordiff

git非常好的VCS冒着无法满足用例的风险,可以很好地与许多差异和合并工具(命令行和GUI工具)集成在一起。如果可以选择,请尝试一下。


1

尝试 sdiff

diff也有选项(-e-ed)创建用于与ed

sdiffdiff并且ed无论您身在何处,都应成为外壳的一部分。

您的版本控制软件可能还内置了diffmerge工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.