手册

查看差异

项目开发中最常见的需求之一是查看发生了哪些变化。您可能想查看同一个文件的两个修订版之间的差异,或者查看两个独立文件之间的差异。TortoiseSVN 提供了一个名为 TortoiseMerge 的内置工具,用于查看文本文件的差异。对于查看图像文件的差异,TortoiseSVN 还提供了一个名为 TortoiseIDiff 的工具。当然,如果您愿意,也可以使用您自己喜欢的 diff 程序。

文件差异

本地更改

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

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

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

您还可以使用存储库浏览器并选择两个要进行比较的树,例如两个标签,或一个分支/标签和主干。那里的上下文菜单允许您使用 比较修订版 对它们进行比较。有关更多信息,请参阅 名为“比较文件夹”的部分

与先前修订版的差异

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

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

两个先前修订版之间的差异

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

如果您是从文件夹的修订日志中执行此操作,则会显示一个比较修订版对话框,其中列出了该文件夹中已更改的文件。有关更多信息,请参阅 名为“比较文件夹”的部分

提交中所有更改

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

文件之间的差异

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

如果要比较的文件不在同一个文件夹中,请使用命令 TortoiseSVN稍后差异 标记第一个文件以进行差异,然后浏览到第二个文件并使用 TortoiseSVN与“路径/标记/文件”进行差异。要删除标记的文件,请再次使用命令 TortoiseSVN稍后差异,但在单击它时按住 Ctrl 修饰符。

工作副本文件/文件夹与 URL 之间的差异

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

带有责备信息的差异

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

文件夹之间的差异

TortoiseSVN 附带的内置工具不支持查看目录层次结构之间的差异。但是,如果您有支持该功能的外部工具,则可以使用它。在名为“外部 Diff/Merge 工具”的部分中,我们介绍了一些我们使用过的工具。

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

行尾和空白选项

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

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

比较空白 将所有缩进和内联空白中的更改都包含在内,作为添加/删除的行。

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

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

当然,任何内容发生更改的行始终包含在 diff 中。

比较文件夹

图 4.29。比较修订版本对话框

The Compare Revisions Dialog


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

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

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

您还可以使用 上下文菜单将选定文件列表保存到... 将已更改文件的列表导出到文本文件。

如果您想导出文件以及操作(修改、添加、删除)的列表,可以使用 上下文菜单将选择内容复制到剪贴板

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

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

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

使用 TortoiseIDiff 对图像进行差异比较

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

图 4.30. 图像差异查看器

The image difference viewer


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

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

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

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

滑块上方的按钮在 0% 和 100% 混合之间切换,如果您双击按钮,混合将每秒自动切换,直到您再次单击按钮。这在查找多个微小更改时很有用。

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

比较 Office 文档

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

Office 2010 问题

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

外部比较/合并工具

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

WinMerge

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

Perforce 合并

Perforce 是一款商业 RCS,但您可以免费下载其 diff/merge 工具。从 Perforce 获取更多信息。

KDiff3

KDiff3 是一款免费的 diff 工具,也可以处理目录。您可以从 这里 下载。

SourceGear DiffMerge

SourceGear Vault 是一款商业 RCS,但您可以免费下载其 diff/merge 工具。从 SourceGear 获取更多信息。

ExamDiff

ExamDiff Standard 是免费软件。它可以处理文件,但不能处理目录。ExamDiff Pro 是共享软件,并添加了一些功能,包括目录 diff 和编辑功能。在两种版本中,3.2 及更高版本都可以处理 Unicode。您可以从 PrestoSoft 下载它们。

Beyond Compare

与 ExamDiff Pro 类似,这是一个优秀的共享软件 diff 工具,可以处理目录 diff 和 Unicode。从 Scooter Software 下载。

Araxis Merge

Araxis Merge 是一款有用的商业工具,用于 diff 和合并文件和文件夹。它在合并中进行三方比较,并具有同步链接,如果您更改了函数的顺序可以使用这些链接。从 Araxis 下载。

阅读 名为“外部程序设置”的部分,了解如何设置 TortoiseSVN 以使用这些工具。

TortoiseSVN 主页