5.19. 创建并应用补丁

对开源工程(比如本工程)来说,每个人对仓库都有读访问权,并且任何人都可以对该工程做出修改。那么如何控制这些修改呢?如果任何人都可以提交自己的修改,那么这个工程可能永远都会处于不稳定状态,而且很有可能永远的瘫痪下去。在这种情况下,修改需要以补丁文件的形式先递交到有写访问权限的开发组。开发组可以先对该补丁文件进行审查,然后决定将其提交到仓库里或者是退还给作者。

补丁文件只是简单地用统一的差异描述文件显示出你的工作副本和基础版本的不同点。

5.19.1. 创建一个补丁文件

首先你需要做出修改并测试这个修改的内容。然后在父目录上使用TortoiseSVN创建补丁...代替TortoiseSVN提交...

图 5.35. 创建补丁的对话框

创建补丁的对话框

现在你可以选择要包含在补丁中的文件了,就像你要做一个完整的提交一样。这样会产生一个单一的文件,该文件包括一份自从最后一次从仓库更新后你对所选择文件做的全部修改的摘要。

在这一对话框中,纵列和在 检查修改对话框中的纵列同样是可以定制的。更多细节请阅读第 5.7.3 节 “本地与远程状态”

你可以创建包含对不同文件集合修改的相互独立的补丁。当然如果你创建了一个补丁文件,对于同一份文件的更多修改会创建另外一个补丁文件,第二份补丁文件包含了全部的修改。

你可以用一个自己选择的文件名来保存这个补丁文件,补丁文件可以有任意的扩展名,但是按人一般习惯,人们都是用.patch或者.diff作扩展名,你现在已经做好提交你的补丁文件的准备了。

你也可以将补丁保存到剪贴板,而不是文件。这样你可以粘贴到电子邮件中,让他人审核。或者你在机器上有两个工作副本,想将修改传递到另外的副本。在剪贴板上的补丁就是为这些操作提供便利。

5.19.2. 应用一个补丁文件

当你对你的工作副本打补丁的时候,你应当在与创建补丁文件时相同的目录层次上。如果你不能确定在那个目录层次上,就看一下补丁文件的第一行。例如,如果补丁第一个要处理的文件是doc/source/english/chapter1.xml 并且补丁文件的第一行是Index: english/chapter1.xml说明你必须要对english目录应用这个补丁文件。尽管如此,倘若你在正确的工作副本上工作,如果你选择了一个错误的目录层次,TSVN会察觉到这个错误,并给出正确的建议。

为了给你的工作副本打补丁,你至少需要对代码库的读权限。因为合并程序必须要参考修订版本中其他开发人员做的修改。

从那个目录的上下文菜单,点击TortoiseSVN应用补丁... 系统会弹出一个打开文件的对话框,让你选择要应用的补丁文件。默认情况下只显示.patch或者.diff文件,但是你可以选择"所有文件"。如果你以前将补丁保存到了剪贴板,可以使用打开文件对话框的从剪贴板打开...

如果补丁文件以.patch 或者 .diff 为扩展名的话,你可以选择直接右键点击该补丁文件,选择TortoiseSVN应用补丁... 在这种情况下,系统会提示你输入工作副本的位置。

这两种方法只是提供了做同一件事的不同方式。第一种方法,你先选择工作副本,然后浏览补丁文件。第二种方法,你先选择补丁文件,然后浏览工作副本。

一旦你选定了补丁文件和工作副本的位置,TortoiseMerge就会把布丁文件合并到你的工作副本中。系统会弹出一个小窗口列出所有被更改了的文件。依次双击每一个文件,检查所做的改变,然后保存合并后的文件。远程开发者的补丁现在已经应用到了你的工作副本上,你需要提交它以使每一个人都可以从代码库访问到这些修改。

远程开发者的补丁现在已经应用到了你的工作副本上,你需要提交它以使每一个人都可以从代码库访问到这些修改。