手册

查看差异

在项目开发中最常见的需求之一是查看已更改的内容。您可能想要查看同一文件的两个版本之间的差异,或者两个单独的文件之间的差异。TortoiseSVN 提供了一个名为 TortoiseMerge 的内置工具,用于查看文本文件的差异。对于查看图像文件的差异,TortoiseSVN 也有一个名为 TortoiseIDiff 的工具。当然,如果您愿意,您可以使用自己喜欢的差异比较程序。

文件差异

本地更改

如果您想查看 在工作副本中所做的更改,只需使用资源管理器上下文菜单并选择 TortoiseSVNDiff

与另一个分支/标签的差异

如果您想查看主干(如果您在分支上工作)或特定分支(如果您在主干上工作)上的更改,您可以使用资源管理器上下文菜单。只需按住 Shift 键,同时右键单击文件。然后选择 TortoiseSVNDiff with URL。在随后的对话框中,指定您想要将本地文件与之比较的存储库中的 URL。

您还可以使用存储库浏览器并选择两个树进行比较,可能是两个标签,或者一个分支/标签和主干。那里的上下文菜单允许您使用 Compare revisions 来比较它们。请阅读 名为“比较文件夹”的章节 以了解更多信息。

与先前版本的差异

如果您想查看特定版本和您的工作副本之间的差异,请使用修订日志对话框,选择感兴趣的版本,然后从上下文菜单中选择 Compare with working copy

如果您想查看上次提交的版本和您的工作副本之间的差异,假设工作副本尚未修改,只需右键单击文件。然后选择 TortoiseSVNDiff with previous version。这将执行上一次提交日期之前(如您的工作副本中所记录)的版本与工作 BASE 之间的差异比较。这将显示对该文件所做的最后更改,使其达到您现在在工作副本中看到的状态。它不会显示比您的工作副本更新的更改。

两个先前版本之间的差异

如果您想查看已提交的两个版本之间的差异,请使用修订日志对话框并选择您要比较的两个版本(使用常用的 Ctrl 修改键)。然后从上下文菜单中选择 Compare revisions

如果您从文件夹的修订日志中执行此操作,则会显示一个“比较版本”对话框,其中显示该文件夹中已更改文件的列表。请阅读 名为“比较文件夹”的章节 以了解更多信息。

提交中所做的所有更改

如果您想在一个视图中查看特定版本中对所有文件所做的更改,您可以使用 Unified-Diff 输出(GNU patch 格式)。这仅显示差异以及一些上下文行。它比可视化文件比较更难阅读,但会将所有更改一起显示。从修订日志对话框中选择感兴趣的版本,然后从上下文菜单中选择 Show Differences as Unified-Diff

文件之间的差异

如果您想查看两个不同文件之间的差异,您可以直接在资源管理器中通过选择两个文件(使用常用的 Ctrl 修改键)来完成。然后从资源管理器上下文菜单中选择 TortoiseSVNDiff

如果要比较的文件不在同一个文件夹中,请使用命令 TortoiseSVNDiff later 标记要进行差异比较的第一个文件,然后浏览到第二个文件并使用 TortoiseSVNDiff with "path/of/marked/file"。要删除标记的文件,请再次使用命令 TortoiseSVNDiff later,但在单击它时按住 Ctrl 修改键。

WC 文件/文件夹和 URL 之间的差异

如果您想查看工作副本中的文件与任何 Subversion 存储库中的文件之间的差异,您可以直接在资源管理器中通过选择文件,然后按住 Shift 键并右键单击以获取上下文菜单来完成。选择 TortoiseSVNDiff with URL。您可以对工作副本文件夹执行相同的操作。TortoiseMerge 以与显示 patch 文件相同的方式显示这些差异 - 一个已更改文件列表,您可以一次查看一个文件。

带有 blame 信息的差异

如果您不仅想查看差异,还想查看更改的作者、版本和日期,您可以从修订日志对话框中组合差异和 blame 报告。阅读 名为“Blame 差异”的章节 以了解更多详细信息。

文件夹之间的差异

TortoiseSVN 提供的内置工具不支持查看目录层次结构之间的差异。但是,如果您有支持该功能的外部工具,则可以使用该工具代替。在 名为“外部差异/合并工具”的章节 中,我们告诉您一些我们使用过的工具。

如果您配置了第三方差异比较工具,您可以在选择 Diff 命令时使用 Shift 来使用备用工具。请阅读 名为“外部程序设置”的章节,了解有关配置其他差异比较工具的信息。

行尾和空格选项

有时在一个项目的生命周期中,您可能会将行尾从 CRLF 更改为 LF,或者您可能会更改某个部分的缩进。不幸的是,即使代码的含义没有改变,这也会将大量行标记为已更改。这里的选项将有助于在比较和应用差异时管理这些更改。您将在 MergeBlame 对话框以及 TortoiseMerge 的设置中看到这些设置。

忽略行尾 排除仅由于行尾样式差异而引起的更改。

比较空格 包括缩进和内联空格中的所有更改,作为添加/删除的行。

忽略空格更改 排除仅由于空格数量或类型更改而引起的更改,例如更改缩进或将制表符更改为空格。在之前没有空格的地方添加空格,或完全删除空格仍显示为更改。

忽略所有空格 排除所有仅包含空格的更改。

当然,任何内容已更改的行始终包含在差异中。

比较文件夹

图 4.29. 比较版本对话框

The Compare Revisions Dialog


当您在存储库浏览器中选择两个树,或者当您在日志对话框中选择文件夹的两个版本时,您可以 上下文菜单Compare revisions

此对话框显示所有已更改文件的列表,并允许您使用上下文菜单单独比较或 blame 它们。

您可以导出 更改树,如果您需要将您的项目树结构发送给其他人,但仅包含已更改的文件,这将非常有用。此操作仅适用于选定的文件,因此您需要选择感兴趣的文件 - 通常这意味着所有文件 - 然后 上下文菜单Export selection to...。系统将提示您输入保存更改树的位置。

您还可以使用 上下文菜单Save list of selected files to... 将已更改文件的 列表 导出到文本文件。

如果您想导出文件 列表 操作(修改、添加、删除),您可以使用 上下文菜单Copy selection to clipboard 来完成。

顶部的按钮允许您更改比较方向。您可以显示从 A 到 B 需要进行的更改,或者如果您愿意,也可以显示从 B 到 A 的更改。

带有版本号的按钮可用于更改为不同的版本范围。当您更改范围时,两个版本之间不同的项目列表将自动更新。

如果文件名列表非常长,您可以使用搜索框将列表缩小到包含特定文本的文件名。请注意,使用简单的文本搜索,因此如果您想将列表限制为 C 源文件,您应该输入 .c 而不是 *.c

使用 TortoiseIDiff 比较图像

有很多工具可用于比较文本文件,包括我们自己的 TortoiseMerge,但我们经常发现自己也想看看图像文件是如何更改的。这就是我们创建 TortoiseIDiff 的原因。

图 4.30. 图像差异查看器

The image difference viewer


TortoiseSVNDiff 对于任何常见的图像文件格式都将启动 TortoiseIDiff 以显示图像差异。默认情况下,图像并排显示,但您可以使用“查看”菜单或工具栏切换到上下视图,或者如果您愿意,您可以叠加图像并假装您正在使用灯箱。

当然,您也可以放大和缩小并平移图像。您也可以通过左键拖动图像来简单地平移图像。如果您选择 链接图像 选项,则两个图像上的平移控件(滚动条、鼠标滚轮)将链接在一起。

图像信息框显示有关图像文件的详细信息,例如像素大小、分辨率和颜色深度。如果此框妨碍了您,请使用 查看图像信息 将其隐藏。如果您将鼠标悬停在图像标题栏上,您可以在工具提示中获得相同的信息。

当图像叠加时,图像的相对强度(alpha 混合)由左侧的滑块控件控制。您可以单击滑块中的任何位置以直接设置混合,也可以拖动滑块以交互方式更改混合。 Ctrl+Shift-滚轮 更改混合。

滑块上方的按钮在 0% 和 100% 混合之间切换,如果您双击该按钮,混合将每秒自动切换一次,直到您再次单击该按钮。当寻找多个小变化时,这可能很有用。

有时您想看到差异而不是混合。您可能拥有印刷电路板的两个版本的图像文件,并想查看哪些走线发生了变化。如果您禁用 alpha 混合模式,差异将显示为像素颜色值的 XOR。未更改的区域将是纯白色,更改将是彩色的。

比较 Office 文档

当您想要比较非文本文档时,通常必须使用用于创建文档的软件,因为它了解文件格式。对于常用的 Microsoft Office 和 Open Office 套件,确实有一些支持查看差异的功能,并且 TortoiseSVN 包含一些脚本,当您比较具有众所周知文件扩展名的文件时,可以使用正确的设置调用这些脚本。您可以通过转到 TortoiseSVN设置 并在 外部程序 部分中单击 高级 来检查支持哪些文件扩展名并添加您自己的文件扩展名。

Office 2010 的问题

如果您安装了 即点即用 版本的 Office 2010,并且您尝试比较文档,您可能会收到来自 Windows 脚本宿主的消息,如下所示: ActiveX 组件无法创建对象:word.Application。似乎您必须使用基于 MSI 的 Office 版本才能获得差异比较功能。

外部差异/合并工具

如果我们提供的工具不能满足您的需求,请尝试许多可用的开源或商业程序之一。每个人都有自己的最爱,此列表绝非完整,但这里有一些您可以考虑的程序:

WinMerge

WinMerge 是一个很棒的开源差异比较工具,也可以处理目录。

Perforce Merge

Perforce 是一个商业 RCS,但您可以免费下载差异/合并工具。从 Perforce 获取更多信息。

KDiff3

KDiff3 是一个免费的差异比较工具,也可以处理目录。您可以从 这里 下载它。

SourceGear DiffMerge

SourceGear Vault 是一个商业 RCS,但您可以免费下载差异/合并工具。从 SourceGear 获取更多信息。

ExamDiff

ExamDiff Standard 是免费软件。它可以处理文件,但不能处理目录。ExamDiff Pro 是共享软件,并添加了许多好东西,包括目录差异和编辑功能。在这两种版本中,3.2 及更高版本都可以处理 unicode。您可以从 PrestoSoft 下载它们。

Beyond Compare

与 ExamDiff Pro 类似,这是一个出色的共享软件差异比较工具,可以处理目录差异和 unicode。从 Scooter Software 下载它。

Araxis Merge

Araxis Merge 是一个有用的商业工具,用于比较和合并文件和文件夹。它在合并中进行三向比较,并具有同步链接,以便在您更改了函数顺序时使用。从 Araxis 下载它。

请阅读 名为“外部程序设置”的章节,了解有关如何设置 TortoiseSVN 以使用这些工具的信息。

TortoiseSVN 主页