心随风动

就像被PS过的照片,浮在表面的漂亮而已。
« 用Java实现PDF报表 - 无色叶子... | 主页 | windows下架设subversion... »
星期四 七月 10, 2008

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

评论:

发表一条评论:


日历


订阅

搜索

书签

导航

访问