如何使用 Xcode 的 FileMerge 工具比较文件

经常被忽视的 Xcode FileMerge 应用程序可让您发现两个文件之间的更改。以下是使用该工具发现差异的方法。

大多数 Apple 软件开发人员都熟悉 Apple 的集成开发环境 (IDE) Xcode

但是,Xcode 捆绑了几个实用程序应用程序,这些应用程序经常被忽视。

这些是:

  1. 辅助功能检查器
  2. 创建 ML
  3. 文件合并
  4. 仪器
  5. 现实作曲家专业版

其中一些应用程序(如 Reality Composer Pro 和 Create ML)是新的,但一个实用程序 FileMerge 已经存在了几十年,并且是 OpenStep 的一部分——OpenStep 是史蒂夫·乔布斯的另一家公司 NeXT 在 1990 年代初创建的原始开发人员工具。

苹果在1997年收购了NeXT,其软件和操作系统(NeXTStep)变成了今天的macOS、iOS和Xcode。

58220-118660-FM-apps-xl
Xcode 的“应用程序”文件夹中的应用程序。

事实上,Xcode 的 FileMerge 是当今为数不多的从原始 NeXTStep 中幸存下来的应用程序之一,它几乎没有变化。

FileMerge最初是作为开发人员比较和合并源文件的工具而创建的,但它也可以在大多数纯文本(.txt)文件上运行良好。

58220-118655-FM-NeXT-xl
NeXTStep 中的原始 FileMerge 应用程序。

访问 FileMerge

FileMerge 位于 Xcode 应用程序包中名为“Contents”的文件夹中名为“Applications”的子文件夹中。因此,Xcode bundle 中 FileMerge 的路径为:

Xcode.app/Contents/Applications/FileMerge.app

有两种方法可以访问 FileMerge:您可以通过从 Xcode 中的 Xcode->Open Developer Tool->FileMerge 菜单中进行选择,也可以在 Finder 中打开 Xcode App 捆绑包本身,打开 /Contents/Applications 子文件夹,然后将 FileMerge 拖到 Dock 以创建快捷指令。

要打开 Xcode 的捆绑包,请在 Finder 中按住 Command 键并单击 Xcode 图标,同时按住 Mac 键盘上的 Command 键,然后从生成的弹出菜单中选择“显示包内容”:

58220-118656-Screenshot-xl
在 Finder 中打开 Xcode App 捆绑包。

术语“包”和“捆绑包”在 macOS 中是同义词。捆绑包只是设置了特殊位的文件夹,用于告诉 Finder 它们包含可执行代码。

您还可以按住 Command 键将 FileMerge 应用程序从 Xcode 的“应用程序”文件夹拖到 Finder 的桌面上,方法是按住 Mac 键盘上的这些键,单击 Xcode 应用程序文件夹中的应用程序图标,然后拖到桌面。这将在桌面上创建指向 FileMerge 的别名快捷方式。

58220-118658-open-dev-xl
从 Xcode 的“打开开发工具”菜单中打开 FileMerge。

如果 Xcode 图标本身位于 Finder 的 Dock 中,您可以按住 Command 键并点按它,然后从弹出式菜单中选择“打开开发工具”->“文件合并”菜单项以打开“文件合并”。这与直接从 Xcode 中打开它的效果相同。

这些方法中的任何一种都可以打开 FileMerge – 只是不要从 Xcode 捆绑包中删除应用程序本身,否则可能会损坏 Xcode 应用程序的完整性。

58220-118657-from-dock-xl
从 Dock 打开 FileMerge。

使用 FileMerge

一旦 FileMerge 打开,它的界面就变得轻而易举了:你会看到一个带有两个级别的小窗口,一个用于要比较的原始文件(“左”),另一个用于较新的文件(“右”),它们应该是相同的,但包含一些与原始文件相比的变化。这两个文件都应该是纯文本文件来比较差异,但您可能会发现 FileMerge 也适用于其他一些有限类型的文本文件。

FileMerge 无法处理大多数编码的文本文件,因此最好在纯文本上使用它。如果您尝试将编码文件与 FileMerge 进行比较,您可能会收到一条警告,警告您“文件不是 ASCII”,并询问您是否要继续。

如果您选择继续,它将比较文件,但您只会看到通常毫无意义的编码比较:FileMerge 不知道如何解码大多数文件。

ASCII 是美国信息交换标准代码的首字母缩写词,是一种古老的基于罗马的语言文本的 8 位编码。此后,ASCII 已被 Unicode 取代,这是一种 16 位文本编码,因为它支持其他语言(例如亚洲和阿拉伯语)中的多字节字符,这些语言具有更大的字符集和特殊字符。

尽管 Unicode 现在是当今计算机上文本编码的全球标准,但在日常使用中,您仍然可能会遇到一些较旧的 8 位 ACSII 文件。

下面是 FileMerge UI:

58220-118659-FM-compare-xl
FileMerge 的主窗口。

您可以使用 macOS 的标准“打开”工作表单击“”和“右”按钮,也可以将这两个文件从 Finder 拖到 FileMerge 窗口右侧的左右图像池中。做任何一个都有相同的效果。

在 FileMerge 中设置这两个文件后,您将看到它们在磁盘上的文件路径显示在“”和“右”按钮旁边的两个编辑字段中。

现在,您可以比较文件了。我们将用一个微不足道的例子来演示。

比较文件

在 FileMerge 界面中设置文件后,单击主窗口右下角的“比较”按钮。这将运行 FileMerge 的比较并打开一个包含两个文件的新差异 (diff) 窗口,突出显示每个文件中的更改。

在差异窗口中,原始文件显示在左侧,更改后的(新)文件显示在右侧。更改由彩色条带表示,这些条带随更改文件中文本更改的部分而变化。

58220-118661-FM-diff-xl
FileMerge 的差异窗口。

当您滚动浏览文件的文本时,FileMerge 会显示这些非常巧妙的条带,以动画方式显示文本的哪些部分已更改。较大的部分滚动速度较慢,因此相反的文件可以赶上。

如果较新的文件插入了文本块,则会突出显示整个文本块,但其插入点会以相同的颜色显示在另一个文件中,并且从包含插入文本的一侧伸出一条细带。当您滚动差异窗口时,波段会平滑移动,因此您可以看到更改的内容。

对于单行更改或仅更改几行,差异窗口会突出显示具有相似波段但只有几行高的更改行。

差异窗口的中心是一列,其中包含箭头,指示两个文件中的哪个文件包含更改。箭头可以向两个方向运行:向左和向右。您可以通过单击每个更改箭头所在的中心列中的更改条带来选择任何单个文本更改。

要选择更改,您必须单击中间列 – 单击差异窗口左侧或右侧窗格中的更改带不会执行任何操作。每个更改箭头上方都有一个数字,指示文件顶部的更改编号。

如果要比较的文件是任何标准编程语言的源代码文件,则差异窗口还会在左右差异窗格的顶部显示一个弹出菜单。每个菜单都包含文件中的所有函数或方法名称 – 从任一菜单中选择方法名称将跳转到文件中的该方法。

使用 Ancestor 和 Merge

在 FileMerge 窗口的底部,您会注意到一个小注释:“放大窗口以指定祖先和/或合并路径”。

如果单击并向下拖动 FileMerge 窗口的底部,您将看到一个附加界面:

58220-118662-FM-compare2-xl
使用“祖先/合并”窗格。

此 UI 允许您做的是添加额外的第三个文件以进行三向合并。要隐藏 Ancestor/Merge UI,只需单击并拖动回 FileMerge 窗口底部。

合并更改

打开差异窗口后,FileMerge 通过更改带显示两者之间的差异,您可以选择处理每个更改的方式:您可以忽略每个更改,也可以将较新的文本复制到相反的文件(合并),或者您可以删除特定的更改。

您可以使用差异窗口右下角的“操作”弹出菜单来执行这些操作

菜单上的可能选项包括:

  1. 选择左边
  2. 选择正确
  3. 选择两者(左边在前)
  4. 两者兼而有之(首先正确)
  5. 两者都不选

如果选择前两个选项中的任何一个,则将对左侧或右侧的文件进行更改。选择这些选项中的任何一个将决定哪个文件将接收更改。

如果选择“同时选择”选项中的任何一个,则更改将根据左侧或右侧文件中的更改添加到两个文件中。

如果选择“两者都不选”,则该更改的箭头将从中心列中删除,指示将忽略该更改。

无论您从弹出菜单中选择哪个操作,都会进行更改 – 并且差异窗口中中心列中的箭头会更新以反映新的现实。

另外,请注意,UI 中没有“更改”按钮 – 当您从弹出菜单中选择操作时,会立即进行更改,而不会出现任何进一步的警告或用户交互。

保存对磁盘的更改

使用“操作”菜单在差异窗口中进行所有更改后,您仍然必须将更改保存到磁盘以便保存它们。

与普通的文本编辑器不同,当您从文件”菜单中选择“文件->保存合并”时,FileMerge 不会自动保存对原始文件所做的更改。这样您的原始文件就可以完好无损地保留,以防您以后想按原样使用它们。

相反,当您选择“文件”->保存合并“时,系统将始终提示您使用标准的”保存“面板,以便您决定要执行的操作 – 如果您单击与原始左文件相同位置的”保存“按钮,则如果要替换原始文件,则将提升您。如果单击“替换”,原始文件将被覆盖。

或者,如果要将同名的原始文件保存在其他位置,可以导航到该文件,然后单击“保存”按钮,也可以将文件重命名为其他名称,并将其保存在与原始文件相同的位置 – 这将创建一个具有您选择的名称的新文件。

File->Save Merge As 实际上与 Save 相同,但您需要为文件指定一个新名称,以便创建一个新文件。

使用差异窗口中的“操作”菜单进行更改后,如果您尝试关闭窗口或退出 FileMerge,系统将提示您保存合并。如果您尝试在不保存的情况下关闭差异窗口,系统会提示您是否要保存。

您可以从警报中取消,也可以单击“不保存”以放弃更改。

如果单击警报中的“保存”按钮,则与从“文件”菜单中选择“文件->保存合并”相同。

无论如何,一旦保存了合并,生成的文件现在将包含您在差异窗口中所做的所有更改。如果您没有显式覆盖原始文件,则该文件将保持不变。

目录比较

您还可以使用 FileMerge 比较包含文件的两个文件夹(目录)。为此,请使用上述技术,但在左/右界面中选择两个文件夹,而不是两个文件。

FileMerge 中的基本文件夹比较功能是检查文件集,以查看它们是否相同、任一文件夹中的文件是否已更改,或者文件是否已添加到任一文件夹或从任一文件夹中删除。

当您点击两个文件文件夹上的“比较”按钮时,FileMerge 会浏览两组文件 – 比较两个文件夹中包含的所有文件。

生成的文件夹比较窗口显示每个文件夹中文件集之间的差异:

58220-118663-FM-compare-dirs-xl
目录比较结果窗口。

如果两个文件夹都包含两个同名的文件,则这些文件名将在左侧显示为灰色。如果文件出现在一个文件夹中,但未出现在另一个文件夹中,则其名称将以斜体显示。

单击左窗格中的任何文件名都会在窗格的左下角显示该文件的状态。

您可以在名为“排除”的右窗格下设置要排除的文件夹更改选项。

下面是两个弹出菜单:第一个包含用于查看和比较文件的项目。从此菜单中选择一个项目将执行类似于差异窗口中的“操作”菜单的操作。

另一个名为“合并”的弹出菜单包含用于在两个比较的文件夹之间移动或合并文件的选项。您可以合并文件,选择仅使用左侧或右侧文件,完全删除文件,以及从列表中删除无法比较的任何文件。

“查看”和“合并”项目可能会令人困惑,并且它们违反了 Apple 的人机界面指南,因为当未单击它们时,它们会显示本应是菜单标签的内容:当您单击其中任何一个时,标题“查看”或“合并”会从任一菜单中消失,然后在您松开鼠标时重新出现。

请谨慎使用“合并”菜单。

使用“合并”菜单后,窗口左下角的小状态消息将更新,以反映已更改的内容。请记住,此窗口主要用于在两个比较的文件夹之间合并或移动文件。

在 FileMerge 中搜索、重新比较和重置

在 FileMerge 中运行文件比较后,您可以通过滚动查看上述差异窗口中的任何差异,或者您可以使用屏幕顶部 FileMerge 菜单栏中的“查找”菜单。

FileMerge 中的查找可能性包括:

  1. 转到下一步
  2. 转到上一页
  3. 转到线/差
  4. 找到
  5. 查找下一个
  6. 查找上一页
  7. 使用选择进行查找
  8. 跳转到所选内容

下一个/上一个选项允许您跳转到下一个或上一个差异、差异窗口左侧或右侧的更改或下一个冲突。冲突是两个几乎相同的文本块,它们都包含更改 – 因此无法进行精确比较。

您需要自行手动解决冲突。

如果在差异窗口中选择某些文本,然后选择“查找”->“使用所选内容进行查找”,则“文件合并”将打开“查找”窗口,但它会自动将所选文本插入到“查找”搜索字段中。

比较完成后,您可以通过关闭差异窗口,然后选择“文件”>“比较文件”将 FileMerge 重置为其原始状态,这将重新打开 FileMerge 主窗口,但上次选择的文件路径仍然完好无损。

您还可以选择“文件”->“重新比较文件”以再次运行上一个比较。如果您对文件进行外部编辑、保存文件,然后希望在更改后重新比较它们,这将非常有用。

FileMerge 设置

如果您从 Mac 屏幕顶部的 FileMerge 菜单栏中选择 FileMerge->Settings,您将看到一个 FileMerge 首选项窗口,该窗口允许您为 FileMerge 的工作方式设置各种行为:

  1. 自动换行文本
  2. 显示更改编号
  3. 显示合并方向
  4. 在滚动条中显示更改
  5. 突出差异
  6. 字体
  7. 目录比较选项
  8. 用于比较的过滤器
  9. 要忽略的文件

要在“文件合并首选项”中保存更改,只需进行更改并关闭窗口即可。

58220-118664-FM-options-xl
“文件合并设置”窗口。

几十年来,FileMerge 一直是 macOS 开发者工具的中流砥柱,但它非常有用,一旦您了解了它的工作原理,您可能会发现自己每天都在使用它。它的界面让人回想起软件小巧、简单、快速且易于使用的时代。

未经允许不得转载:表盘吧 » 如何使用 Xcode 的 FileMerge 工具比较文件