查看差异

在项目开发中,有一个很常用的要求就是查看更改。可能是你要求查看同一文件的两个版本之间的差异,或者是查看两个独立的文件的差异。TortoiseSVN 自带了一个工具叫 TortoiseMerge 用来查看文本文件的差异。也有一个叫 TortoiseIDiff 的工具来查看图像文件的差异。当然,你可以根据你自己的喜好来选择比较差异的工具。

文件差异

  • 本地修改

如果你想看到你的本地副本有哪些更加,只用在资源管理器中右键菜单下选TortoiseSVN → 比较差异。

  • 与另外一个分支/标签之间的差异

如果你想查看主干程序(假如你在分支上开发)有哪些修改或者是某一分支(假如你在主干上开发)有哪些修改,你可以使用右键菜单。在你点击文件的同时按住Shift键,然后选择TortoiseSVN → URL比较。在弹出的对话框中,将特别显示将与你本地版本做比较的版本的URL地址。

你还可以使用版本库浏览器,选择两个目录树比较,也许是两个标记,或者是分支/标记和最新版本。右键菜单允许你使用比较版本来比较它们。阅读“比较文件夹”一节

  • 与历史版本的比较差异

如果你想查看某一特定版本与本地副本之间的差异,使用显示日志对话框,选择要比较的版本,然后选择在右键菜单中选与本地副本比较差异

如果你想查看上一次提交的版本和你的工作副本之间的差异,假设你的工作副本没有被修改,只要用右键单击文件。然后选择 TortoiseSVN → 与前一版本比较。这样将会对上一次提交时间(记录在你的工作副本中)之前的版本和工作基础版本进行差异比较。它将会显示工作副本中此文件变成当前状态的那一次修改。它不会显示比工作副本更新的修改。

  • 两个历史版本的比较

如果你要查看任意已提交的两个历史版本之间的差异,在版本日志对话框中选择你要比较的两个版本(一般使用 Ctrl-更改),然后在右键菜单中选比较版本差异

如果你在文件夹的版本日志中这样做,就会出现一个比较版本对话框,显示此文件夹的文件修改列表。阅读“比较文件夹”一节

  • 提交所有修改

如果你要在一个视窗中查看某一版本的所有更改,你可以使用统一显示所有比较 (GNU 片段整理)。它将显示所有修改中的部分内容。它很难显示一个全面清晰的比较,但是会将所有更改都集中显示出来。在版本日志对话框中选择某一版本,然后在右键菜单中选择统一显示所有比较。

  • 文件差异

如果你要查看两个不同文件之间的差异,你可以直接在资源管理器中选择这两个文件(一般使用 Ctrl-modifier),然后右键菜单中选TortoiseSVN → 比较差异。

If the files to compare are not located in the same folder, use the command TortoiseSVN → Diff later to mark the first file for diffing, then browse to the second file and use TortoiseSVN → Diff with "path/of/marked/file". To remove the marked file, use the command TortoiseSVN → Diff later again, but hold down the Ctrl-modifier while clicking on it.

  • WC文件/文件夹与URL之间的比较差异

如果你要查看你本地副本中的某个文件与任意 Subversion 版本库中的某个文件之间的差异,你可以之间在资源管理器中操作,选中文件然后按下 Shift 键,同时右键单击显示右键菜单。选中 TortoiseSVN → 与 URL 比较。你可以对工作副本文件夹做相同的操作。TortoiseMerge 通过与显示补丁文件相同的方法显示文件夹差异 - 你可以通过一个已修改文件列表分别查看某个文件。

  • 追溯信息之间的比较差异

如果你要查看的不仅是比较差异而且包括修改该版本的作者,版本号和日期,你可以在版本日志对话框中综合比较差异和追溯信息。这里有更多详细介绍“追溯不同点”一节

  • 比较文件夹差异

TortoiseSVN 自带的内置工具不支持查看多级目录之间的差异,但你可以使用支持该功能的外置工具来替代。在 “其他的比较/合并工具”一节

如果你已经配置了第三方的比较工具,你可以在选择比较差异命令的时候按下 Shift 键来选择替代工具。关于配置其它比较工具,请参阅 “外部程序设置”一节

行结束符和空白选项

在项目的生命周期中,有时可能会将行结束符由 CRLF 改为 LF,或者修改一段代码的缩进。不幸的是这样将会使大量的代码行被标记为已修改,尽管代码本身并没有被修改。这里列出的选项将会在比较差异和应用补丁时帮助你应对这些修改。你将会在合并和追溯对话框中看到这些设置,它们同样也出现在 TortoiseMerge 的设置中。

忽略行结束符 排除仅行结束符的差异。

比较空白 将所有缩进和行内空白差异视为增加/删除的行。

忽略空白修改 排除那些完全是针对空白数量或类型的修改,例如,修改缩进或者将 tab 改为空格。在原来没有空白的地方增加空白或删除全部空白仍然会显示为修改。

忽略所有空白 排除仅空白改变的差异。

自然的,任何已经修改内容的行永远都包含在差异中。

比较文件夹

图 4.28. 比较修订版本对话框

比较修订版本对话框

当你在版本库浏览器中选择了两个树,或者在日志对话框中选择了一个文件夹的两个版本,就可以使用右键菜单 → 比较版本差异。

这个对话框显示一个所有已经修改的文件列表,允许你使用右键菜单单独的比较或追溯它们。

你可以导出修改树,当你需要将仅包含已修改文件的项目树结构发送给其它人的时候很有用。这个操作仅对选中的文件有效,所以需要选择你感兴趣的文件 - 通常这就意味着全部文件 - 然后使用右键菜单 → 导出选择项…。然后会提示你选择目录保存修改树。

你也可以通过右键菜单 → 保存选择文件列表将修改过的文件列表导出为文本文件。

如果你需要导出文件列表动作(修改,增加,删除),你可以使用右键菜单 → 复制到剪贴板。

顶部的按钮允许你改变比较的方向。你可以显示从A到B的修改,或者如果你喜欢,显示从B到A的修改。

有版本数字的按钮可以用来改变版本范围。当你改变范围时,两个版本不同的项目列表会自动更新。

如果列表中的文件非常多,你可以使用查找框来筛选文件名中包含指定文字的文件,从而减少列表中的文件。注意这里使用的是简单文本查找,所以当你需要显示 C 语言源码的列表时,你应该输入.c 而不是 *.c

使用 TortoiseIDiff 进行比较的图像

我们有许多有用的比较文本文件的工具,包括我们自带的TortoiseMerge,但是我们也需要查看图像文件的更改。这就是我们设计TortoiseIDiff的原因。

图 4.29. 差异察看器截图

差异察看器截图

TortoiseSVN → 比较差异 会启动 TortoiseIDiff 显示常用格式的图像差异。一般情况下是左右对称地显示两个图像,但你也可以通过视图菜单或者工具栏切换为上下显示的模式,或者如果你愿意,也可以重叠显示图像。

当然你也可以放大和缩小,或者移动图像。你也可以简单的通过左键拖拽来移动图像。如果你选择链接图像位置,则移动控制(滑动条,鼠标滚轮)对两幅图像同时生效。

在图像信息框中显示了图像的基本信息,比如像素的大小,颜色的深度。如果觉得这个框碍眼可以选择视图 → 图像信息来隐藏它。当你的鼠标指针位于图像标题栏上方时,可以从工具提示中获得同样的信息。

当图像叠加时,图像的相对亮度(alpha 混合)由左边的滑杆控制。你可以点击滑杆的任意地方来设置混合参数,或者通过拖曳滑杆来交互改变。Ctrl+Shift-鼠标滚轮也可以改变混合参数。

滑杆上方的按钮可以切换 0% 和 100% 混合,如果你双击按钮,会每隔两秒钟自动切换,直到再次点击按钮为止。当查看多处小更改时,这个功能很有用。

有时你想要查看不同但不是混合图像。也许你有两个版本的印刷电路板图像文件,想查看哪些线条改变了。如果你关闭 alpha 混合模式,不同之处会以像素颜色值的或非(XOR)结果显示。未修改的区域是纯白色的,修改的部分则是彩色的。

比较Office文档

When you want to diff non-text documents you normally have to use the software used to create the document as it understands the file format. For the commonly used Microsoft Office and Open Office suites there is indeed some support for viewing differences and TortoiseSVN includes scripts to invoke these with the right settings when you diff files with the well-known file extensions. You can check which file extensions are supported and add your own by going to TortoiseSVN → Settings and clicking Advanced in the External Programs section.

Office 2010的问题

If you installed the Click-to-Run version of Office 2010 and you try to diff documents you may get an error message from Windows Script Host something like this: “ActiveX component can't create object: word.Application”. It seems you have to use the MSI-based version of Office to get the diff functionality.

其他的比较/合并工具

如果我们提供的这些工具不是你所需要的,可以尝试使用一些其他开源的或者商业的软件。每个人都有不同喜好,下面列表虽不完全,或许有些你也会认可的:

  • WinMerge

WinMerge是一款能处理目录的优秀开源软件。

  • Perforce Merge

Perforce 是一款商业 RCS,但是你也可以免费下载diff/merge工具。可以从Perforce得到更多信息。

  • KDiff3

KDiff3也是一款能处理目录的免费比较工具。你可以从here下载。

  • SourceGear DiffMerge

SourceGear Vault 是一款商业 RCS,但是你也可以免费下载diff/merge工具。可以从SourceGear

  • ExamDiff

ExamDiff Standard是免费软件。它能处理文件但不能处理目录。ExamDiff Pro是共享软件,拥有一系列的功能包括目录比较和编辑的能力。对于以上体验,3.2及以上版本能处理二进制。你可以从PrestoSoft下载它们。

  • Beyond Compare

和ExamDiff Pro一样,这也是一款不错的共享diff工具,同样也能进行目录比较和二进制处理。下载地址Scooter Software

  • Araxis Merge

Araxis Merge是一款能对文件和文件夹进行比较和合并的商业软件。在合并时它进行三路比较,而且在你修改函数的顺序时可以进行异步链接。可以从这里下载 Araxis

“外部程序设置”一节