附录 B. 故障解决

在安装和使用Subversion的过程中会有许多问题,有一些在你更加理解Subversion之后会立刻解决,而有一些会引起麻烦,因为你已经习惯于其它版本控制系统的工作方式。也有一些其它的问题不能解决是因为Subversion在一些操作系统上有bug(考虑到Subversion运行系统的广泛性,没有遇到更多已经是一件让人吃惊的事情了)。

下面的列表是从Subversion多年使用过程中编辑出来的,如果你没有在这里发现问题,可以在Subversion网站上察看最新版本的FAQ。如果你还是有问题,可以发送包含你遇到问题详细描述的邮件到[46]

这里是Subversion的FAQ最流行的问题。

Subversion的一个好的特性是版本库理解拷贝和重命名,并且保留历史联系。举个例子,如果你拷贝/trunk/branches/mybranch,然后版本库理解为在分支的每个文件都在trunk有个“前辈”。运行svn log --verbose会显示历史拷贝,所以你可以看到重命名:

r7932 | joe | 2003-12-03 17:54:02 -0600 (Wed, 03 Dec 2003) | 1 line
Changed paths:
   A /branches/mybranch (from /trunk:7931)

很不幸,当版本库意识到拷贝和重命名,版本1.0的几乎所有的svn客户端子命令还没有意识到。svn diffsvn mergesvn cat应该理解这些重命名,但是它们没有。它们是1.0之后的特性,举个例子,如果你询问svn diff比较两个早期版本的/branches/mybranch/foo.c,这个命令不会自动理解为实际上我们是要比较两个版本的/trunk/foo.c,因为这个重命名。相反,你会看到一个错误说这个分支路径在早期的修订版本并不存在。

解决所有此类问题的方法是你自己的调查,也就是:需要知道所有的重命名路径,自己使用svn log -v去发现,然后明确地告诉svn客户端,例如,我们不应该运行

$ svn diff -r 1000:2000 http://host/repos/branches/mybranch/foo.c
svn: Filesystem has no item
svn: '/branches/mybranch/foo.c' not found in the repository at revision 1000

...而会运行

$ svn diff -r1000:2000 http://host/repos/trunk/foo.c
...


[46] 记住你所能提供的设置细节和问题的数量与从邮件列表得到答案的可能性成正比,鼓励你包括所有的事情,除了早饭吃了什么和你妈妈的娘家姓。