27.5. Subversion 简介

Subversion 是一个开放源代码的版本控制系统,被公认为是 CVS 的后续版本,这意味着上文介绍的 CVS 的功能 Subversion 一般都提供。在希望利用 CVS 的优点但又想避开它的缺点时,subversion 是您的首选。这其中的很多功能已经在第 27.1.3 节 “Subversion”中有简要介绍。

27.5.1. 安装 Subversion 服务器

在服务器上安装储存库是个相对简单的过程。Subversion 为此提供了一个专用管理工具。创建新储存库需要输入以下命令:

svnadmin create /path/to/repository

使用 svnadmin help 可以列出其它选项。与 CVS 不同的是,Subversion 不基于 RCS,而是基于不同类型的存储库。通常使用 Berkeley Database 或 FSFS(直接使用文件系统的存储库)切勿将储存库安装在远程文件系统上,如 NFS、AFS 或 Windows SMB。该数据库需要 POSIX 锁定机制,而这是这些文件系统无法支持的。

命令 svnlook 提供有关现有储存库的信息。

svnlook info /path/to/repository

必须配置服务器,允许不同用户访问该储存库。可以使用支持 WebDAV 的 Apache 万维网服务器进行配置,或使用 svnserve, 即用 Subversion 封装的服务器。一旦 svnserve 启动并运行,即可使用带 svn://svn+ssh:// 的 URL 访问该储存库。可以在 /etc/svnserve.conf 中设置在调用 svn 时应自我鉴定的用户。

使用 Apache 还是 svnserve 取决于很多因素。建议阅读 Subversion 手册。有关详细信息,请参见第 27.5.3 节 “参见信息”

27.5.2. 用法和操作

使用命令 svn(类似 cvs)可访问 Subversion 储存库。使用 svn help 可获得命令参数的说明:


checkout (co): Check out a working copy from a repository.
usage: checkout URL[@REV]... [PATH]

  If specified, REV determines in which revision the URL is first
  looked up.

  If PATH is omitted, the basename of the URL will be used as
  the destination. If multiple URLs are given each will be checked
  out into a sub-directory of PATH, with the name of the sub-directory
  being the basename of the URL.
...

使用以下命令之一,从任何客户机都能够访问正确配置的服务器(配有相应的储存库)提供的内容。

svn list http://svn.example.com/path/to/project

svn list svn://svn.example.com/path/to/project

使用命令 svn checkout 可以将现有项目保存到当前目录中(将其签出):

svn checkout http://svn.example.com/path/to/project nameofproject

签出操作将在客户机上创建新的子目录 nameofproject。随后可对其执行各种操作(添加、复制、重命名、删除):

svn add file
svn copy oldfile newfile
svn move oldfile newfile
svn delete file

这些命令也可以用于目录。Subversion 还可额外记录文件或目录的属性:

svn propset license GPL foo.txt

上例为属性 license 设置了值 GPL。使用 svn proplist 可以显示属性:

svn proplist --verbose foo.txt
 Properties on 'foo.txt':
 license : GPL

使用 svn commit 可以将更改保存到服务器中。其它用户通过使用 svn update 与服务器同步,可以将您的更改并入他或她自己的工作目录。

不同于 CVS,不必使用 svn status 访问储存库即可显示 Subversion 中的工作目录的状态。本地更改显示在五列中,最前面一列最为重要:

' '

无更改。

'A'

对象被标记为添加。

'D'

对象被标记为删除。

'M'

对象已修改。

'C'

对象发生冲突。

'I'

对象被忽略。

'?'

对象未能由版本控制维护。

'!'

报告对象缺失。在没有使用 svn 命令删除或移动对象时就会出现此标志。

'~'

对象本来作为文件维护,但之后被替换为目录,或者出现相反的情况。

第二列显示属性状态。有关其它所有列的含义,请参见 Subversion 手册。

27.5.3. 参见信息

首要参考来源是 Subversion 项目的主页:http://subversion.tigris.org/。还有一本很值得参见的手册。在安装 subversion-doc 软件包后,该手册位于 file:///usr/share/doc/packages/subversion/html/book.html 目录下,也可以在 http://svnbook.red-bean.com/svnbook/index.html 中查阅该手册的联机版本。