版本控制是管理改动信息的技术。它对于程序员而言一直是重要的工具,他们经常花时间对程序进行小改动之后又在第二天改回来。但版本控制软件的用途却远远超出了软件开发的界线。无论何处您可以发现人们使用计算机去管理那些经常变动的信息,那里都有使用版本控制的空间。
Subversion 是一个开源的版本控制系统。使用 Subversion,您可以记录源文件和文档的历史。它管理文件和目录。文件树被放入了中心库中。库更象是一个普通的文件服务器,除了它可以记住对文件和目录的每次改变。
要通过 HTTP 协议来访问 Subversion 库,您必须安装和配置一个 web 服务器。Apache2 被证明可以和 Subversion 一起工作。请参考 Apache2 章节的 HTTP 小节以安装和配置 Apache2。要使用 HTTPS 协议访问 Subversion 库,您必须在您的 Apache2 web 服务器上安装和配置数字证书。请参考 Apache2 章节的 HTTPS 小节以安装和配置数据证书。
要安装 Subversion,可以在终端提示符后运行以下命令:
sudo apt-get install subversion libapache2-svn
这一步假定您已经在您的系统上安装了上面提及的包。本部分内容说明如何创建一个 Subversion 库和访问项目。
Subversion 库可以通过许多不同的方式如通过在本地磁盘或不同的网络协议来访问 (checked out)。然而,库的位置经常是一个 URL。下表描述了不同的URL模式如何映射相应的访问方式。
表 4.1. 访问方式
模式 |
访问方式 |
---|---|
file:// |
直接访问库 (在本地磁盘) |
http:// |
通过 WebDAV 协议访问带有 Subversion 的 Apache2 web 服务器。 |
https:// |
与 http:// 相同,但有 SSL 加密 |
svn:// |
通过自身协议访问 svnserve 服务 |
svn+ssh:// |
与 svn:// 一样,但使用 SSH 遂道 |
在本部分,我们将看到如何为所有这些访问方式来配置 Subversion。这里,我们只介绍基本用法。更多详细、高级用法请参阅svn 书
这是所有访问方式中最简单的。它不要求运行任何 Subversion 服务器进程。该访问方式用于在同一台机器上访问 Subversion。在终端提示符后输入的命令如下所示:
svn co file:///path/to/repos/project
或
svn co file://localhost/path/to/repos/project
如果您没有指定主机名,则需要三个斜杠 (///) -- 其中两个是协议的 (这里是 file),另一个是路径前的。如果您指定了主机名,那么您必须使用双个斜杠 (//)。
库权限依赖于文件系统的权限。如果用户有读/写权限,他可以从库中检出或者提交到库。
要通过 WebDAV 协议访问 Subversion,您必须配置您的 Apache2 web 服务器。您必须在您的 /etc/apache2/apache2.conf
文件中添加下面一小段:
<Location /svn> DAV svn SVNPath /path/to/repos AuthType Basic AuthName "Your repository name" AuthUserFile /etc/subversion/passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
接下来,您必须创建 /etc/subversion/passwd
文件。该文件包含用户认证细节。要添加一个条目,如添加一个用户,您可以在终端提示符后运行下列命令:
htpasswd2 /etc/subversion/passwd user_name
该命令将提示您输入密码。一旦您输入密码。该用户将被添加。现在您可以运行下列命令来访问库:
svn co http://servername/svn
该密码是以纯文本传输的。如果您担心密码被截取,建议您使用 SSL 加密。相关细节,请参考下一章节。
通过带 SSL 加密的 WebDAV 协议 (https://) 访问也使用 http:// 类似,只是您必须在您的 Apache2 web 服务器中安装和配置数字证书。
您可以安装由证书签署机构如 Verisign 颁发的数字证书。或者,您也可以安装自己签署的证书。
这一步假设您已经在您的 Apache2 web 服务器中安装和配置了数字证书。现在要访问 Subversion 库,请参考上一章节!除了所用协议之外访问方式完全相同。您必须使用 https:// 来访问 Subversion 库。
一旦 Subversion 库被创建,您就可以配置访问控制了。您可以通过编辑 /path/to/repos/project/conf/svnserve.conf
文件来配置访问控制了。例如,要设置认证,您可以在配置文件中反注释下列行:
# [general] # password-db = passwd
在反注释上面几行之后,您可以在 passwd 文件中维护用户列表。因此编辑同一目录中的文件 passwd
并添加新用户。其语法如下:
username = password
更多细节,请参考该文件。
现在要从本机或不同机器通过 svn:// 自身协议来访问 Subversion,您可以使用 svnserve 命令来运行 svnserver。其语法如下:
$ svnserve -d --foreground -r /path/to/repos # -d -- daemon mode # --foreground -- run in foreground (useful for debugging) # -r -- root of directory to serve For more usage details, please refer to: $ svnserve --help
一旦您运行该命令,将启动 Subversion 并在缺省端口 (3690) 监听。要访问项目库,您必须在终端提示符后运行下列命令:
svn co svn://hostname/project project --username user_name
根据服务器的配置,出现密码提示。一旦您认证通过,将从 Subversion 库检出代码。要让本地副本同步项目库,您可以运行 update 子命令。在终端提示符后的命令语法如下所示:
cd project_dir ; svn update
关于 Subversion 子命令的更多细节,您可以参考手册。如为了学到关于 co (checkout) 命令的细节,请在终端提示符后运行下列命令:
svn co help
配置和服务器处理与用 svn:// 方式是相同的。详情请参考上面的章节。这一步假定您已经完成了上面的步骤并用 svnserve 命令启动了 Subversion 服务器。
它也假定 ssh 服务器已经在该机上运行并允许连接。为了确认,请尝试使用 ssh 登录该机器。如果您可以登录,一切就绪。如果不能登录,请在继续之前解决它。
svn+ssh:// 协议使用 SSL 加密来访问 Subversion 库。使用这种方式进行的数据传输是加密的。要访问项目库 (如 checkout),您必须使用下面的命令语法:
svn co svn+ssh://hostname/var/svn/repos/project
使用这种访问方式您必须使用全路径 (/path/to/repos/project) 来访问 Subversion 库。
根据服务器配置,它将提示输入密码。在使用 ssh 登录时您必须输入密码。一旦您被认证通过之后,它将从 Subversion 库中检出代码。
CVS 是一个版本控制系统。您可以使用它来记录源文件的历史。
在终端提示符后输入下列命令来安装 cvs:
sudo apt-get install cvs
在您安装 cvs之后,您将安装 xinetd 来启动和停用 cvs 服务器。在提示符后输入下列命令以安装 xinetd:
sudo apt-get install xinetd
一旦您安装 cvs,将会自动初始化库。缺省状态下,库存放在 /var/lib/cvs 目录下。您可以通过运行以下命令来改变该路径:
cvs -d /your/new/cvs/repo init
一旦库开始建立,您可以配置 xinetd 来启动 CVS 服务器。您可以拷贝以下行到 /etc/xinetd/cvspserver
文件。
service cvspserver { port = 2401 socket_type = stream protocol = tcp user = root wait = no type = UNLISTED server = /usr/bin/cvs server_args = -f --allow-root /var/lib/cvs pserver disable = no }
如果你改变缺省的库目录 (/var/lib/cvs) 那么您必须要编辑库。
一旦您配置好 xinetd ,您就可以运行以下命令来启动 cvs 服务器了:
sudo /etc/init.d/xinetd start
您可以执行以下命令来确定 CVS 服务器正在运行:
sudo netstat -tap | grep cvs
当您运行该命令时,您可以看到类似下面的行:
↵ tcp 0 0 *:cvspserver *:* LISTEN ↵
在这里您可以继续添加用户,添加新的项目以及管理 CVS 服务器
CVS 允许用户添加独立于 OS 安装的用户。也许最容易的方式就是让 CVS 使用 Linux 的用户,虽然它有潜在的安全隐患。详细请参考 CVS 手册。
本部分内容说明如何在 CVS 库中添加新项目。创建目录以及该目录所需的文档和源文件。现在运行下列命令将该项目添加到 CVS 库中:
cd your/project cvs import -d :pserver:username@hostname.com:/var/lib/cvs -m "Importing my project to CVS repository" . new_project start
您可以使用 CVSROOT 环境变量来保存 CVS 根目录。一旦您导出 CVSROOT 环境变量,您可以在上面的 cvs 命令中避免使用 -d 选项。
字符串 new_project 是一个 vendor 标签,start 是一个版本标签。它们在此没有任何用处,但由于 CVS 要求要有它们,所以它们必须出现。
当您新添项目时,您所用的 CVS 用户必须对 CVS 库 (/var/lib/cvs) 有写权限。缺省状态下,src 组有对 CVS 库的写权限,因此,您可以添加用户到该组,然后就该用户就可以在 CVS 库中添加和管理项目了。