Subversion简明手册--服务器管理(代码库的基本管理、启动服务器、与Apche web server集成) - 修行的武者 - DonewsBlog
作为代码库数据存放地的服务器,自然是开发管理的重点对象之一。Subversion服务器管理涉及的主要命令:
svnlook
查看代码库的信息,其中的路径是代码库的路径。
svnadmin
subversion管理工具。
svndumpfilter
指定dump代码库的过滤条件。如,在导出的代码库中包含哪些文件,排除哪些文件。
svnserve
subversion服务器程序。
Subversion没有提供远程的服务器控制工具,对于服务器的管理命令必须运行在与代码库相同的机器上。这样做的目的也是为了更加的安全。
主要的服务器管理活动:
1. 代码库的基本管理。
创建
动机
建立整个项目的版本控制的环境和目录结构。
步骤
1. svnadmin create 目录名。目录可以存在,也可以不存在。目录如果存在,目录必须为空目录。
2. 创建版本库的本地内容。如果是全新的项目,那么可能就只有空的目录结构。如果是进行中纳入版本控制的项目(即以前项目内容没有使用版本控制),那么需要先把整个项目复制到服务器的上。这种情况下,目录包含目录结构以及项目文件。
3. svn import 目录 代码库存放位置 -m 消息。成功后,目录中的内容进入“代码库存放位置”,目录本身就没用了。
注意:目录本身不会进入代码库,只有目录下的内容才会进入。如:
project
/src
/lib
/readme.txt
使用svn import project …后,在代码库中有readme.txt,src,lib,而没有project。为了使project进入代码库,那么在它的上一级在建一个目录,如tmp,使用这个目录作为import的目录。
导出
动机
备份代码库,Subversion的导出文件格式是OS无关的。
步骤
svnadmin dump 版本库目录 > 文件名
导入
动机
þ 代码库的数据迁移,如从一种OS到另一种OS。
þ 恢复损坏的代码库。
þ 将原来大的代码库拆分成多个小的代码库,如原来的代码库目录如下:
projects
/project1
/project2
/project3
现在想以project1、project2、project3分别作为一个代码库来进行版本控制。
þ 将小代码库合并,即上一种情况的反面。
步骤
1. 获取代码库的导出文件。注意:周期备份的重要性。当代码库损坏后,dump出来的文件也肯定是坏的。此时,就必须使用以前备份的文件。
2. svnadmin create 新代码库目录。
3. 拆分版本库。如果不需要,跳过此步。在Windows下(unix下使用cat):
type 导出文件 | svndumpfilter include(exclude) path > 新导出文件
4. svnadmin load 新版本库目录 < 导出文件。如果是合并,那么需要指定父目录:
svnadmin load新版本库目录 --parent-dir 父目录< 导出文件
清理事务
动机
清除提交死事务。通常,事务结束(成功或失败)时会被清除。但是,在有些异常情况下,会导致清除工作永远不再发生。
步骤
1. svnadmin lstxns来列出未处理的transaction。
2. 使用svnlook加上--transaction来查看事务的属性。
3. 确认无误之后,使用svnadmin rmtxns 事务名来清除事务。
也可以使用一条命令来完成,如:
svnadmin rmtxns myrepos 'svnadmin lstxns myrepos '
修复版本库
动机
解锁代码库。如由于前次执行时,断电导致前一个用户锁住代码库。
步骤
svnadmin recover 版本库目录,在执行这个命令时,确定是独占代码库,在执行完之后,重启服务器。
释放无用的数据库日志
动机
节约硬盘空间。(仅对代码库格式为Berkeley DB时需要)。
不用的数据库日志,是指活动数据库不用的日志。但是这些文件需要被保存,以防万一需要时恢复数据库。
步骤
1. 列出无用日志文件
svnadmin list-unused-dblogs 代码库目录
2. 归档并释放
svnadmin list-unused-dblogs 代码库目录 | xargs rm
2. 启动服务器。Subversion支持的存取协议:
file:///
本地文件存取,此时代码库位于本地。如:file:///X:/path/to/repos。
http://
通过webdav连接知道Subversion代码库的Apache http server来存取代码库。对于Apache http server需要安装subversion提供的关于webdav的模块,同时还需经过相关的配置。如:http://svn.example.com/repos/calc。
https://
与http://相同,但使用ssl。
svn://
subversion协议。如:svn://example.com/usr/local/repos/project
svn+ssh://
subversion协议,并有ssh加密。如:svn+ssh://example.com/usr/local/repos/
对于file:///协议,不需要启动Subversion的服务器守护进程,svnserve。svnserve的开关含义:
- -i 每个请求会产生一个svnserve进程。
- -t 一般用于RSH和SSH,对于每个经过验证验证的用户来说,就象本地用户通过File:///来存取代码库一样。这个用户需要有操作Repository的权限。
- -d 以守护进程的方式运行,所有请求都有一个svnserve进程。
当服务器运行之后,需要使用代码库的绝对路径来存取。如版本库位于/usr/local/repositories/project1,那么对于客户端对应的访问的url:
svn://host.example.com/usr/local/repositories/project1,
为了简化和安全,可以使用-r来指定root。如svnserve -d -r /usr/local/repositories。那么,客户端使用时直接使用svn:// host.example.com/就可以访问代码库的根目录。
3. 与Apche web server集成,这样用户就可以通过http://来访问代码库。主要的步骤:
a) 环境配置:最简单的做法就是先安装Apache Web Server,然后安装Subversion。这样相关的配置(包括Web Dav和权限)都会自动的完成。手动配置的做法,详见subversion的手册。
b) 代码库的配置,在httpd.conf文件中:
目的
配置
共享单个代码库
<Location /repos>
DAV svn
SVNPath /absolute/path/to/repository
</Location>
共享多个代码库,如果这些代码库有共同的父目录
<Location /svn>
DAV svn
# /svn/foo映射到/usr/local/svn/foo
SVNParentPath /usr/local/svn
</Location>
注意,在location中指定的地址不要有重叠的。如已经存在一个documentroot是www,那么就不要指定/www/repo。否则,apache将不知如何处理请求的url。此时,启动apache(不需要启动svnserve进程),客户端就可以使用http://来访问代码库了。
Subversion简明手册--服务器管理(代码库的基本管理、启动服务器、与Apche web server集成) - 修行的武者 - DonewsBlog
12:49上午 七月 10, 2008 由 Kiven 发布在 备忘录 | 评论[0]