不喜欢 diff?试试 Meld

Meld 是一款可视化 diff 工具,可以更轻松地比较和合并文件、目录、Git 仓库等中的更改。
121 位读者喜欢这篇文章。

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 命令以在终端中查看它们的差异

diff output

此示例显示了 conway1.pyconway2.py 之间的差异。它显示我

  • 删除了 shebang 和第二行
  • 从类声明中删除了 (object)
  • 向类添加了文档字符串
  • 在方法中交换了 aliveneighbours == 2 的顺序

这是使用 meld 命令的相同示例。您可以从命令行运行相同的比较,命令如下

$ meld conway1.py conway2.py

Meld output

清晰多了!

您可以通过单击箭头轻松查看更改并合并文件之间的更改(它们是双向工作的)。您甚至可以实时编辑文件(Meld 兼作一个简单的文本编辑器,在您键入时进行实时比较)——只需确保在关闭窗口之前保存即可。

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

Comparing three files in Meld

Meld 的 Git 感知能力

希望您正在使用像 Git 这样的版本控制系统。如果是这样,您的比较不是在两个不同的文件之间,而是查找当前工作文件与 Git 已知文件之间的差异。Meld 理解这一点,因此如果您运行 meld conway.py,其中 conway.py 是 Git 已知的,它将显示自上次 Git 提交以来所做的任何更改

Comparing Git files in Meld

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

如果您运行 meld .,您将看到当前目录(或整个仓库,如果您在它的根目录中)中的所有更改

Meld . output

您可以看到一个文件已修改,另一个文件未版本化(意味着它是 Git 新增的,因此我需要在比较之前 git add 该文件),以及许多其他未修改的文件。顶部图标提供了各种显示选项。

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

Comparing directories in Meld

结论

即使是普通用户也可能觉得 diff 的比较难以理解。我发现 Meld 提供的可视化效果在排除文件之间更改的问题方面有很大帮助。最重要的是,Meld 具有一些有用的版本控制意识,并帮助您跨 Git 提交进行比较,而无需过多考虑。试试 Meld,让故障排除变得更轻松。


本文最初发布在 Ben Nuttall 的 Tooling 博客 上,并经许可重复使用。

接下来读什么
标签
User profile image.
Ben 是 BBC News Labs 的软件工程师,曾任 Raspberry Pi 的社区经理。他热衷于 Linux、Python 和所有开源事物!在 Twitter 上关注 Ben:@ben_nuttall。

6 条评论

好文章,我喜欢 Meld!

一定会试试 Meld。感谢分享 :)

自从你向我提到 Meld 后,我就开始使用它了,我非常喜欢它。git 的自动检测功能也非常方便。感谢分享!

它现在已经非常过时了,但我仍然非常喜欢 cs-diff 的显示风格。它显示文件的单个视图,并注释了差异。新行/文本被突出显示,删除的内容被划掉。

我还没有找到更现代的工具提供这种选项。

好文章。我也喜欢它。

关于 meld 的一个注意事项,我管理着许多 CentOS 6(是的,我们“很快”就要升级到 7 了),我的用户喜欢使用 meld,但在少数情况下,它会遗漏一些 diff。不幸的是,我通常太忙而无法调查。也许当前版本可能没有这个问题。
但是,我仍然喜欢 meld 的精美图形界面。
还有 tkdiff,它随 tkcvs 包一起提供。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.