标签 diff 下的文章

如果你曾经试图通过电子邮件或聊天来协作处理文件,并且发现自己试图描述需要修改的地方,那么你会喜欢 diffpatch 的。

我编辑过很多文本文件。有时是代码。其他时候是角色扮演游戏(RPG)、编程书籍或一般信件的书面文字。有时候,做一个修改,而能让我的协作者把我的修改和他们原来写的东西进行比较就更好了。许多人默认使用办公套件(如 LibreOffice)的注释或更改跟踪功能。不过有时更简单的工具更有意义,为此,你可以看看像 diffpatch 这样的工具的编程历史,它们为跟踪和应用共享文件的变化提供了标准化的格式。

即使对于简单的文件,在同步两个文件时也有复杂性。一些项目被改变,另一些被保留,新的内容被添加,还有一些保持不变,但被移到文件的不同位置。如果接受所有的变化,并且用新文件替换旧文件,就很难复制变化。它也是整体不透明的。如果变化很多,就很难挑出到底发生了什么变化。

通过 diff 命令,你可以创建一个文件变化的记录,通过 patch 你可以在旧版本上“重放”这些变化,使其与新版本保持一致。

设置

假设你和我正在合作编写一个描述如何泡茶的文件。

到目前为止,文件 tea.md 包含原始的复制粘贴来的内容:

烧开水。
加热茶壶。
在茶壶中加入茶和水。
在茶壶上放置一个茶叶滤网。
浸泡 6 分钟。
将茶倒入杯中。
加入牛奶。

这似乎很合理,但总有一些优化可以做,所以你把文件发给我改进。为了澄清泡茶过程,我把文件复制为tea-revision.md,并进行编辑,最后是这样的:

在烤箱的抽屉中加热茶壶。
烧开水。
将茶叶放入茶叶滤网。
将滤网和水加入茶壶。
浸泡 6 分钟。用茶壶罩保温。
将茶倒入杯中。
可以选择加入温牛奶。

正如预期的那样,一些项目(“烧开水”和“将茶倒入杯中”)没有变化,而其他行(“加热茶壶”)则有增加。有些行是全新的,有些行是相同的,但顺序不同。

创建一个差异

diff 工具会显示两个文件之间的差异。有几种不同的方法来查看结果,但我认为最清楚的是 —unified(简写为 -u)视图,它显示哪些行被增加或减少了。以任何方式改变的行都被视为先减后增的行。默认情况下,diff 将其输出打印到终端。

diff 提供旧文件,然后是新文件:

$ diff --unified tea.md tea-revised.md 
--- tea.md      2021-11-13 10:26:25.082110219 +1300
+++ tea-revised.md      2021-11-13 10:26:32.049110664 +1300
@@ -1,7 +1,7 @@
+在烤箱的抽屉中加热茶壶。
 烧开水。
-加热茶壶。
-在茶壶中加入茶和水。
-在茶壶上放置一个茶叶滤网。
-浸泡 6 分钟。
+将茶叶放入茶叶滤网。
+将滤网和水加入茶壶。
+浸泡 6 分钟。用茶壶罩保温。
 将茶倒入杯中。
-加入牛奶。
+可以选择加入温牛奶。

行首的加号(+)表示在旧文件中增加了一些内容。行首的减号(-)表示被删除或改变的行。

用 diff 创建一个补丁

补丁文件就是将 diff —unified 命令的输出放到一个文件中。你可以用标准的 Bash 重定向来做这件事:

$ diff -u tea.md tea-revised.md > tea.patch

该文件的内容与输出到终端的内容完全相同。我喜欢在 Emacs 中查看补丁文件,它对每一行进行颜色编码,取决于它是被添加还是被减去。

 title=

用补丁应用修改

一旦我有了补丁文件,我就可以把它发给你,让你审查,并且可以选择应用到你的旧文件中。你可以用 patch 命令来应用一个补丁。

$ patch tea.md tea.patch

增加了一些行,减少了一些行,最后,你得到了一个与我的版本相同的文件:

$ cat tea.md
在烤箱的抽屉中加热茶壶。
烧开水。
将茶叶放入茶叶滤网。
将滤网和水加入茶壶。
浸泡 6 分钟。用茶壶罩保温。
将茶倒入杯中。
可以选择加入温牛奶。

你可以给一个文件打多少次补丁,这是没有限制的。你可以对我的修改进行迭代,生成一个新的补丁,然后发给我审核。发送修改内容而不是结果,可以让每个贡献者审查修改的内容,决定他们要保留或删除的内容,并准确地记录过程。

安装

在 Linux 和 macOS 上,你已经有了 diffpatch 命令。在 Windows 上,你可以通过 Cygwin 获得 diffpatch,或者使用 Chocolatey 搜索 diffutilspatch

如果你曾经试图通过电子邮件或聊天来协作处理文件,并且发现自己需要 描述 需要修改的地方,那么你会喜欢 diffpatch。一个结构严谨的文件,如代码或以行为单位的 Markdown,很容易进行差异比较、补丁和维护。


via: https://opensource.com/article/21/11/linux-diff-patch

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何比较两个相似的文件来检查差异?答案显而易见,就是使用 Linux 中的 diff 命令

问题是,并不是每个人都能自如地在 Linux 终端中比较文件,而且 diff 命令的输出可能会让一些人感到困惑。

以这个 diff 命令的输出为例:

这里肯定涉及到一个学习曲线。然而,如果你使用的是桌面 Linux,你可以使用 GUI 应用来轻松比较两个文件是否有任何差异。

有几个 Linux 中的 GUI 差异比较工具。我将在本周的 Linux 应用亮点中重点介绍我最喜欢的工具 Meld。

Meld:Linux(及 Windows)下的可视化比较和合并工具

通过 Meld,你可以将两个文件并排比较。不仅如此,你还可以对文件进行相应的修改。这是你在大多数情况下想做的事情,对吗?

File Comparison

Meld 还能够比较目录,并显示哪些文件是不同的。它还会显示而文件是新的或是缺失的。

Directory Comparison

你也可以使用 Meld 进行三向比较。

Three Way File Comparison

图形化的并排比较在很多情况下都有帮助。如果你是开发人员,你可以用它来了解代码补丁。Meld 还支持版本控制系统,如 Git、MercurialSubversion 等。

Meld 的功能

开源的 Meld 工具具有以下主要功能:

  • 进行双向和三向差异比较
  • 就地编辑文件,差异比较立即更新
  • 在差异和冲突之间进行导航
  • 通过插入、更改和冲突相应地标示出全局和局部差异,使其可视化
  • 使用正则文本过滤来忽略某些差异
  • 语法高亮显示
  • 比较两个或三个目录,看是否有新增加、缺失和更改的文件
  • 将一些文件排除在比较之外
  • 支持流行的版本控制系统,如 Git、Mercurial、Bazaar 和 SVN
  • 支持多种国际语言
  • 开源 GPL v2 许可证
  • 既可用于 Linux,也可用于 Windows

在 Linux 上安装 Meld

Meld 是一个流行的应用程序,它在大多数 Linux 发行版的官方仓库中都有。

检查你的发行版的软件中心,看看 Meld 是否可用。

Meld In Ubuntu Software Center

另外,你也可以使用你的发行版的命令行包管理器来安装 Meld。在 Ubuntu 上,它可以在 Universe 仓库中找到,并且可以使用 apt 命令安装

sudo apt install meld

你可以在 GNOME 的 GitLab 仓库中找到 Meld 的源码:

Meld Source Code

它值得使用吗?

我知道大多数现代开源编辑器都有这个功能,但有时你只是想要一个简单的界面,而不需要安装额外的附加软件来比较文件。Meld 就为你提供了这样的功能。

你是否使用一些其他工具来检查文件之间的差异?是哪种工具呢?如果你用过 Meld,你有什么经验?请在评论区分享你的意见。


via: https://itsfoss.com/meld-gui-diff/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Meld 是一个可视化 diff 工具,它可让你轻松比较和合并文件、目录、Git 仓库等的更改。

Meld 是我处理代码和数据文件的基本工具之一。它是一个图形化的 diff 工具,因此,如果你曾经使用过 diff 命令并难以理解输出,那么 Meld 可以为你提供帮助。

这是该项目网站的精彩描述:

“Meld 是面向开发人员的可视化 diff 和合并工具。Meld 可以帮助你比较文件、目录和版本控制的项目。它提供文件和目录的双向和三向比较,并支持许多流行的版本控制系统。”

“Meld 可以帮助你检查代码更改并了解补丁。它甚至可以帮助你弄清你一直在避免的合并中发生了什么。”

你可以使用以下命令在 Debian/Ubuntu 系统(包括 Raspbian)上安装 Meld:

$ sudo apt install meld

在 Fedora 或类似产品上:

$ sudo dnf install meld

Meld 是跨平台的,它有一个使用 Chocolately 包管理器的 Windows 安装包。尽管它在 macOS 上不受官方支持,但有可用于 Mac 的版本,你可以使用 Homebrew 安装:

$ brew cask install meld

有关其他系统,请参见 Meld 的主页。

Meld 对比 diff 命令

如果你有两个相似的文件(也许一个是另一个的修改版本),并想要查看它们之间的更改,那么可以在终端中运行 diff 命令查看它们的区别:

 title=

此例显示了 conway1.pyconway2.py 之间的区别。表明我:

  • 删除了释伴)和第二行
  • 从类声明中删除了 (object)
  • 为类添加了 docstring
  • 在方法中交换了 aliveneighbours == 2 的顺序

这是使用 meld 命令的相同例子。你可以在命令行中运行以下命令进行相同的比较:

$ meld conway1.py conway2.py

 title=

Meld 更清晰!

你可以轻松查看并单击箭头(左右都行)合并文件之间的更改。你甚至可以实时编辑文件(在输入时,Meld 可以用作具有实时比较功能的简单文本编辑器)—只是要记得在关闭窗口之前保存。

你甚至可以比较和编辑三个不同的文件:

 title=

Meld 的 Git 感知

希望你正在使用 Git 之类的版本控制系统。如果是这样,那么你的比较就不是在两个不同文件之间进行,而是要查找当前文件与 Git 历史文件之间的差异。Meld 理解这一点,因此,如果你运行 meld conway.pyconway.py 在 Git 中),它将显示自上次 Git 提交以来所做的更改:

 title=

你可以看到当前版本(右侧)和仓库版本(左侧)之间的更改。你可以看到,自上次提交以来,我删除了一个方法,并添加了一个参数和一个循环。

如果你运行 meld .,你将看到当前目录(如果位于仓库的根目录,就是整个仓库)中的所有更改:

 title=

你会看到一个文件被修改了,另一个文件未加入版本控制(这意味着它对 Git 是新的,因此在比较之前,我需要 git add 添加该文件),以及许多其他未修改的文件。顶部的图标提供了各种显示选项。

你还可以比较两个目录,这有时很方便:

 title=

结论

即使是普通用户也会觉得 diff 的比较难以理解。我发现 Meld 提供的可视化在找出文件之间的更改方面有很大的不同。最重要的是,Meld 有一些有用的版本控制认知,可以帮助你在不考虑太多内容的情况下对 Git 提交进行比较。快来试试 Meld,并轻松解决问题。


本文最初发表在 Ben Nuttall 的 Tooling blog 上,并经允许重新使用。


via: https://opensource.com/article/20/3/meld

作者:Ben Nuttall 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

摘要

在 Linux 的日常使用中,我们经常需要修改一些配置文件,然而在软件升级以后,经常会面临配置更新后与原配置部分不兼容的问题(当然我们更多的可能是来制作软件升级的补丁)。在这种情况下我们通常有两种选择:

  • 对比现有配置,手动在新配置文件中改动
  • 利用 sedawk 等工具配合改动
  • 采用 diffpatch 制作增量补丁的方式改动

本文主要通过一个升级awesome 配置的例子,对第三种方法进行介绍和讲解。

diff 介绍

diff 是一个文件比较工具,可以逐行比较两个文件的不同,其中它有三种输出方式,分别是 normalcontext 以及 unified。区别如下:

  • normal 方式为默认输出方式,不需要加任何参数
  • context 相较于 normal 模式的简单输出,contetx 模式会输出修改过部分的上下文,默认是前后 3 行。使用参数 -c
  • unified 合并上下文模式则为新的上下文输出模式,同样为前后 3 行,只不过把上下文合并了显示了。使用参数 -u

:本文主要介绍 unified 模式

其他常用参数:

  • -r 递归处理目录
  • -N 将缺失的文件当作空白文件处理

diff 语法与文件格式

diff [options] old new

先来看一个简单的例子:

$ cat test1 
linux
linux
linux
linux
$ cat test2
locez
linux
locez
linux

此时输入 diff -urN test1 test2 会输出以下信息:

--- test1   2018-05-12 18:39:41.508375114 +0800
+++ test2   2018-05-12 18:41:00.124031736 +0800
@@ -1,4 +1,4 @@
+locez
 linux
-linux
-linux
+locez
 linux

先看前面 2 行,这两行为文件的基本信息,--- 开头为改变前的文件,+++ 开头为更新后的文件。

--- test1   2018-05-12 18:39:41.508375114 +0800
+++ test2   2018-05-12 18:41:00.124031736 +0800

第三行为上下文描述块,其中 -1,4 为旧文件的 4 行上下文,+1,4 为新文件的:

@@ -1,4 +1,4 @@

而具体到块里面的内容,前面有 - 号的则为删除,有 + 号为新增,不带符号则未做改变,仅仅是上下文输出。

patch 介绍

patch 是一个可以将 diff 生成的补丁应用到源文件,生成一个打过补丁版本的文件。语法:

patch [oiption] [originalfile [patchfile]]

常用参数:

  • -i 指定补丁文件
  • -pNumdiff 生成的补丁中,第一二行是文件信息,其中文件名是可以包含路径的,例如 --- /tmp/test1 2018-05-12 18:39:41.508375114 +0800 其中 -p0 代表完整的路径 /tmp/test1,而 -p1 则指 tmp/test1-pN 依此类推
  • -E 删除应用补丁后为空文件的文件
  • -o 输出到一个文件而不是直接覆盖文件

应用

awesome 桌面 3.5 与 4.0 之间的升级是不兼容的,所以在升级完 4.0 以后,awesome 桌面部分功能无法使用,因此需要迁移到新配置,接下来则应用 diffpatch 实现迁移,当然你也可以单纯使用 diff 找出不同,然后手动修改新配置。

现在有以下几个文件:

  • rc.lua.3.5 3.5 版本的默认配置文件,未修改
  • rc.lua.myconfig 基于 3.5 版本的个人配置文件
  • rc.lua.4.2 4.2 新默认配置,未修改

思路为利用 diff 提取出个人配置与 3.5 默认配置文件的增量补丁,然后把补丁应用在 4.2 的文件上实现迁移。

制作补丁

$ diff -urN rc.lua.3.5 rc.lua.myconfig  > mypatch.patch

应用补丁

$ patch rc.lua.4.2 -i mypatch.patch -o rc.lua
patching file rc.lua (read from rc.lua.4.2)
Hunk #1 FAILED at 38.
Hunk #2 FAILED at 55.
Hunk #3 succeeded at 101 with fuzz 1 (offset 5 lines).
Hunk #4 succeeded at 276 with fuzz 2 (offset 29 lines).
2 out of 4 hunks FAILED -- saving rejects to file rc.lua.rej

显然应用没有完全成功,其中在 38 行以及 55 行应用失败,并记录在 rc.lua.rej 里。

$ cat rc.lua.rej 
--- rc.lua.3.5  2018-05-12 19:15:54.922286085 +0800
+++ rc.lua.myconfig 2018-05-12 19:13:35.057911463 +0800
@@ -38,10 +38,10 @@

 -- {{{ Variable definitions
 -- Themes define colours, icons, font and wallpapers.
-beautiful.init("@AWESOME_THEMES_PATH@/default/theme.lua")
+beautiful.init("~/.config/awesome/default/theme.lua")

 -- This is used later as the default terminal and editor to run.
-terminal = "xterm"
+terminal = "xfce4-terminal"
 editor = os.getenv("EDITOR") or "nano"
 editor_cmd = terminal .. " -e " .. editor

@@ -55,18 +55,18 @@
 -- Table of layouts to cover with awful.layout.inc, order matters.
 local layouts =
 {
-    awful.layout.suit.floating,
-    awful.layout.suit.tile,
-    awful.layout.suit.tile.left,
-    awful.layout.suit.tile.bottom,
-    awful.layout.suit.tile.top,
+--    awful.layout.suit.floating,
+--    awful.layout.suit.tile,
+--    awful.layout.suit.tile.left,
+--    awful.layout.suit.tile.bottom,
+--    awful.layout.suit.tile.top,
     awful.layout.suit.fair,
     awful.layout.suit.fair.horizontal,
     awful.layout.suit.spiral,
     awful.layout.suit.spiral.dwindle,
     awful.layout.suit.max,
     awful.layout.suit.max.fullscreen,
-    awful.layout.suit.magnifier
+--    awful.layout.suit.magnifier
 }
 -- }}}

这里是主题,终端,以及常用布局的个人设置。

修正补丁

再次通过对比补丁文件与 4.2 文件,发现 38 行区块是要删除的东西不匹配,而 55 行区块则是上下文与要删除的内容均不匹配,导致不能应用补丁,于是手动修改补丁

$ vim mypatch.patch
--- rc.lua.3.5  2018-05-12 19:15:54.922286085 +0800
+++ rc.lua.myconfig 2018-05-12 19:13:35.057911463 +0800
@@ -38,10 +38,10 @@

 -- {{{ Variable definitions
 -- Themes define colours, icons, font and wallpapers.
-beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua")
+beautiful.init("~/.config/awesome/default/theme.lua")

 -- This is used later as the default terminal and editor to run.
-terminal = "xterm"
+terminal = "xfce4-terminal"
 editor = os.getenv("EDITOR") or "nano"
 editor_cmd = terminal .. " -e " .. editor

@@ -55,18 +55,18 @@

 -- Table of layouts to cover with awful.layout.inc, order matters.
 awful.layout.layouts = {
-    awful.layout.suit.floating,
-    awful.layout.suit.tile,
-    awful.layout.suit.tile.left,
-    awful.layout.suit.tile.bottom,
-    awful.layout.suit.tile.top,
+--    awful.layout.suit.floating,
+--    awful.layout.suit.tile,
+--    awful.layout.suit.tile.left,
+--    awful.layout.suit.tile.bottom,
+--    awful.layout.suit.tile.top,
     awful.layout.suit.fair,
     awful.layout.suit.fair.horizontal,
     awful.layout.suit.spiral,
     awful.layout.suit.spiral.dwindle,
     awful.layout.suit.max,
     awful.layout.suit.max.fullscreen,
-    awful.layout.suit.magnifier,
+--    awful.layout.suit.magnifier,
     awful.layout.suit.corner.nw,
     -- awful.layout.suit.corner.ne,
     -- awful.layout.suit.corner.sw,
....
....

输出省略显示,有兴趣的读者可以仔细与rc.lua.rej 文件对比,看看笔者是怎样改的。

再次应用补丁

$ patch rc.lua.4.2 -i mypatch.patch -o rc.lua
patching file rc.lua (read from rc.lua.4.2)
Hunk #1 succeeded at 41 (offset 3 lines).
Hunk #2 succeeded at 57 with fuzz 2 (offset 2 lines).
Hunk #3 succeeded at 101 with fuzz 1 (offset 5 lines).
Hunk #4 succeeded at 276 with fuzz 2 (offset 29 lines).
$ cp rc.lua ~/.config/awesome/rc.lua  ### 打完补丁直接使用

总结

diffpatch 配合使用,能当增量备份,而且还可以将补丁分发给他人使用,而且在日常的软件包打补丁也具有重要的意义,特别是内核补丁或者一些驱动补丁,打补丁遇到错误时候可以尝试自己修改,已满足自身特殊要求,修改的时候一定要抓住 2 个非常重要的要素:

  1. 要修改的内容是否匹配?特别是要删除的
  2. 上下文是否满足,特别是距离要修改的地方前后一行,以及上下文的行数是否满足,默认是 3 行上下文

在之前的一篇文章里,我们回顾了 Linux 下 9 个最好的文件比较工具,本篇文章中,我们将会描述在 Linux 下怎样找到两个目录之间的不同。

一般情况下,要在 Linux 下比较两个文件,我们会使用 diff (一个简单的源自 Unix 的命令行工具)来显示两个计算机文件的不同;它一行一行的去比较文件,而且很方便使用,在几乎全部的 Linux 发行版都预装了。

问题是在 Linux 下我们怎么才能比较两个目录?现在,我们想知道两个目录中哪些文件/子目录是共有的,哪些只存在一个于目录。

运行 diff 常规的语法如下:

$ diff [OPTION]… FILES
$ diff options dir1 dir2 

默认情况下,输出是按文件/子文件夹的文件名的字母排序的,如下面截图所示,在命令中, -q 开关是告诉 diif 只有在文件有差异时报告。

$ diff -q directory-1/ directory-2/

Difference Between Two Directories

两个文件夹之间的差异

再次运行 diff 并不能进入子文件夹,但是我们可以使用 -r 开关来读子文件夹,如下所示。

$ diff -qr directory-1/ directory-2/ 

使用 Meld 可视化比较和合并工具

meld 是一个很酷的图形化工具(一个 GNOME 桌面下的可视化的比较和合并工具),可供那些喜欢使用鼠标的人使用,可按如下来安装。

$ sudo apt install meld  [Debian/Ubuntu systems]
$ sudo yum install meld  [RHEL/CentOS systems]
$ sudo dnf install meld  [Fedora 22+]

一旦你安装了它之后,在 Ubuntu Dash 或者 Linux Mint 菜单搜索 “meld” ,或者 Fedora 或 CentOS 桌面的 Activities Overview,然后启动它。

你可以看到如下的 Meld 界面,可以选择文件或者文件夹来比较,此外还有版本控制视图。点击目录比较并移动到下个界面。 Meld Comparison Tool

Meld 比较工具

选择你想要比较的文件夹,注意你可以勾选 “3-way Comparison” 选项,添加第三个文件夹。

Select Comparison Directories

选择比较的文件夹

选择好要比较的文件夹后,点击 “Compare”。

Listing Difference Between +

文件夹不同列表

在这篇文章中,我们描述了怎么在 Linux 下找到两个文件夹的不同。如果你知道其他的命令或者图形界面工具,不要忘记在下方评论分享你们的想法。


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S 爱好者,即将成为 Linux 系统管理员,Web 开发者,目前是 TecMint 的内容创建者,他喜欢使用电脑工作,并且非常相信分享知识。


via: http://www.tecmint.com/compare-find-difference-between-two-directories-in-linux/

作者:Aaron Kili 译者:hkurj 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

文件比较工具用于比较计算机上的文件的内容,找到他们之间相同与不同之处。比较的结果通常被称为diff。

diff同时也是一个基于控制台的、能输出两个文件之间不同之处的著名的文件比较程序的名字。diff是于二十世纪70年代早期,在Unix操作系统上被开发出来的。diff将会把两个文件之间不同之处的部分进行输出。

Linux拥有很多不错的GUI工具,能使你能清楚的看到两个文件或同一文件不同版本之间的不同之处。这次我从自己最喜欢的GUI比较工具中选出了五个推荐给大家。除了其中的一个,其他的都是开源的。

这些应用程序可以让你更清楚的看到文件或目录的差别,能合并有差异的文件,可以解决冲突并将其输出成一个新的文件或补丁,其也用于那些预览和备注文件改动的产品上(比如,在源代码合并到源文件树之前,要先接受源代码的改变)。因此它们是非常重要的软件开发工具。它们可以帮助开发人员们对文件进行处理,不停的把文件转来转去。这些比较工具不仅仅能用于显示源代码文件中的不同之处;他们还适用于很多种的文本文件。可视化的特性使文件比较变得容易、简单。


Meld

Meld是一个适用于Gnome桌面的、开源的、图形化的文件差异查看和合并的应用程序。它支持2到3个文件的同时比较、递归式的目录比较、处于版本控制(Bazaar, Codeville, CVS, Darcs, Fossil SCM, Git, Mercurial, Monotone, Subversion)之下的目录比较。还能够手动或自动合并文件差异。

Meld的重点在于帮助开发人员比较和合并多个源文件,并在他们最喜欢的版本控制系统下能直观的浏览改动过的地方。

功能包括

  • 原地编辑文件,即时更新
  • 进行两到三个文件的比较及合并
  • 在显示的差异和冲突之间的导航
  • 使用插入、改变和冲突这几种标记可视化展示本地和全局的差异
  • 内置正则表达式文本过滤器,可以忽略不重要的差异
  • 语法高亮度显示(使用可选的gtksourceview)
  • 将两到三个目录中的文件逐个进行比较,显示新建,缺失和替换过的文件
  • 对任何有冲突或差异的文件直接打开比较界面
  • 可以过滤文件或目录以避免以忽略某些差异
  • 被改动区域的自动合并模式使合并更容易
  • 也有一个简单的文件管理
  • 支持多种版本控制系统,包括Git, Mercurial, Bazaar 和 SVN
  • 在提交前开启文件比较来检查改动的地方和内容
  • 查看文件版本状态
  • 还能进行简单的版本控制操作(例如,提交、更新、添加、移动或删除文件)
  • 继承自同一文件的两个文件进行自动合并
  • 标注并在中间的窗格显示所有有冲突的变更的基础版本
  • 显示并合并同一文件的无关的独立修改
  • 锁定只读性质的基础文件以避免出错
  • 可以整合到已有的命令行界面中,包括gitmergetool
  • 国际化支持
  • 可视化使文件比较更简单
  • 网址: meldmerge.org
  • 开发人员: Kai Willadsen
  • 证书: GNU GPL v2
  • 版本号: 1.8.5

DiffMerge

DiffMerge是一个可以在Linux、Windows和OS X上运行的,可以可视化文件的比较和合并的应用软件。

功能包括:

  • 图形化显示两个文件之间的差别。包括插入行,高亮标注以及对编辑的全面支持
  • 图形化显示三个文件之间的差别。(安全的前提下)允许自动合并,并对最终文件可以随意编辑
  • 并排显示两个文件夹的比较,显示哪一个文件只存在于其中一个文件夹而不存在于另外的一个文件夹,还能一对一的将完全相同的、等价的或不同的文件配对
  • 规则设置和选项让你可以个性化它的外观和行为
  • 基于Unicode,可以导入多种编码的字符
  • 跨平台工具
  • 网址: sourcegear.com/diffmerge
  • 开发人员: SourceGear LLC
  • 证书: Licensed for use free of charge (not open source)
  • 版本号: 4.2

xxdiff

xxdiff是个开源的图形化的可进行文件、目录比较及合并的工具。

xxdiff可以用于显示两到三个文件或两个目录的差别,还能产生一个合并后的版本。被比较的两到三个文件会并排显示,并将有区别的文字内容用不同颜色高亮显示以便于识别。

这个程序是个非常重要的软件开发工具。他可以图形化的显示两个文件或目录之间的差别,合并有差异的文件,其也用于那些预览和备注文件改动的产品上(比如,在源代码合并到源文件树之前,要先接受源代码的改变)

功能包括:

  • 比较两到三个文件,或是两个目录(浅层或递归)
  • 横向高亮显示差异
  • 交互式的文件合并,可视化的输出和保存
  • 可以辅助合并的评论/监管
  • 自动合并文件中时不合并 CVS 冲突,并以两个文件显示以便于解决冲突
  • 可以用其它的比较程序计算差异:适用于GNU diff、SGI diff和ClearCase的cleardiff,以及所有与这些程序输出相似的文件比较程序。
  • 可以使用资源文件实现完全的个性化设置
  • 用起来感觉和Rudy Wortel或SGI的xdiff差不多,与桌面系统无关
  • 功能和输出可以和脚本轻松集成
  • 网址: furius.ca/xxdiff
  • 开发人员: Martin Blais
  • 证书: GNU GPL
  • 版本号: 4.0

Diffuse

Diffuse是个开源的图形化工具,可用于合并和比较文本文件。Diffuse能够比较任意数量的文件,并排显示,并提供手动行匹配调整,能直接编辑文件。Diffuse还能从bazaar、CVS、darcs, git, mercurial, monotone, Subversion和GNU RCS 库中获取版本用于比较及合并。

功能包括:

  • 比较任意数量的文件,并排显示(多方合并)
  • 行匹配可以被用户人工矫正
  • 直接编辑文件
  • 语法高亮
  • 支持Bazaar, CVS, Darcs, Git, Mercurial, Monotone, RCS, Subversion和SVK
  • 支持Unicode
  • 可无限撤销
  • 易用的键盘导航
  • 网址: [diffuse.sourceforge.net][]
  • 开发人员: Derrick Moser
  • 证书: GNU GPL v2
  • 版本号: 0.4.7

Kompare

Kompare是个开源的GUI前端程序,可以对不同源文件之间差异的可视化和合并。Kompare可以比较文件或文件夹内容的差异。Kompare支持很多种diff格式,并提供各种选项来设置显示的信息级别。

不论你是个想比较源代码的开发人员,还是只想比较一下研究论文手稿与最终文档的差异,Kompare都是个有用的工具。

Kompare是KDE桌面环境的一部分。

功能包括:

  • 比较两个文本文件
  • 递归式比较目录
  • 显示diff产生的补丁
  • 将补丁合并到一个已存在的目录
  • 可以让你在编译时更轻松
  • 网址: www.caffeinated.me.uk/kompare/
  • 开发者: The Kompare Team
  • 证书: GNU GPL
  • 版本号: Part of KDE

via: http://www.linuxlinks.com/article/2014062814400262/FileComparisons.html

作者:Frazer Kline 译者:H-mudcup 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出