一、修改SVN服务器的配置文件 

安装

Yum install subversion

在库创建完成之后会在conf下会生成svnserve.conf, passwd, authz三个文件。

1)svnserve.conf

anon-access = none  

auth-access = write 

password-db = passwd svn密码文件,若有多个库,可将文件放到公共位置) 

authz-db = authz   (目录权限文件,建议同上) 

realm = /svn/project/  (认证域,相同认证域下的项目使用相同的passwd和authz,暂时不用理会)注意顶格写不要留空白这个配置完必须重启SVN服务器,而下面两个则不需要。 

注:anon-access 未认证用户(简配为none,否者认证用户查看日志还需增加一些设置) 

auth-access 经认证用户 

password-db 指定用户及密码的配置文件,可以是相对路径             

authz-db指定用户权限的配置文件,可以是相对路径 

 

2)passwd文件: 

在[users]字段下增加用户及密码,例:   

[users]   

user1 = 123456   

user2 = 123456 

3)authz文件: 

[aliases] 

joe = DC=red-bean, Joe Average [groups] 

manager = gli developer = sli  

[/]

* = 

$anonymous =  

$authenticated = r 

szhang = r 

&joe = r 

@developer = r 

@manager = rw  

[testrepo:/]   

* = 

$anonymous =   

$authenticated = r  

szhang = r   

&joe = r 

@developer = r   

@manager = rw 

注:[aliases]字段为别名 

 [groups]将用户归类到组 

 [testrepo:/]指定具体目录的用户权限,可以为组,也可以为单独用户;组前以@开头,别名用户以&开头,单独用户不需要加前缀;*表示其他用户,$authenticate代表验证通过的用户,$anonymous代表未验证通过的用户。权限有rw、r和空,空表示没有任何权限。这里的路径[/]表示版本库根目录(svnserve时指定的路径),然后具体的版本库需写明路径,如[testrepo:/],需注意的是testrepo是一个版本库,其位于svn版本库根目录下,不可以写成[/testrepo:/]或[./testrepo:/],及版本库名之前为具体的linux下存放路径(如另一个版本库[mtk/mt6575:/]),另外由于版本库里面的内容目录结构是受SVN数据库管理的,不同于linux直接的文件目录,故需加[:/],例如需对testrepo版本库里的trunks分支增加权限控制,应写成[testrepo:/trunks/]  

注:当[anon-access = read]将导致认证用户无法获取日志,此时设为[anon-access = none]即可导致认证用户无法获取日志

4) 建立svn版本库目录 

可建多个: 

mkdir -p /opt/svndata/repos1 

mkdir -p /opt/svndata/repos2 

建立svn版本库 

svnadmin create /opt/svndata/repos1 

svnadmin create /opt/svndata/repos2 

修改svn版本库配置文件 版本库1: 

vi /opt/svndata/repos1/conf/svnserve.conf 内容修改为: 

[general] 

anon-access = none 

auth-access = write 

password-db = /opt/svn/conf/passwd.conf 

authz-db = /opt/svn/conf/authz

realm = repos1 

版本库2: 

vi /opt/svndata/repos2/conf/svnserve.conf 内容修改为: 

[general] 

anon-access = none 

auth-access = write 

password-db = /opt/svn/conf/passwd 

authz-db = /opt/svn/conf/authz

realm = repos2 

即除realm = repos2外,其他与版本库1配置文件完全相同。如果有更多的版本库,依此类推。 

5)配置允许访问的svn用户 

vi /opt/svn/conf/passwd 

为了简化配置,2个版本库共用1个用户配置文件。如有必要,也可以分开。文件路径在svnserver.conf文件中passwd-db中定义。

注意:对用户配置文件的修改立即生效,不必重启svn。 

文件格式如下: 

[users] 

<用户1> = <密码1> 

<用户2> = <密码2> 

其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例: 

[users] 

alan = password

king = hello 

6)配置svn用户访问权限 

vi /opt/svn/conf/authz

为了简化配置,2个版本库共用1个权限配置文件/opt/svn/conf/passwd。如有必要,也可以分开。文件中定义用户组和版本库目录权限。 

注意: 

权限配置文件中出现的用户名必须已在用户配置文件中定义。 

对权限配置文件的修改立即生效,不必重启svn。 

用户组格式: 

[groups] 

<用户组名> = <用户1>,<用户2> 

其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。 

版本库目录格式: 

[<版本库>:/项目/目录] 

@<用户组名> = <权限>  

<用户名> = <权限> 

其中,方框号内部分可以有多种写法: 

/,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/opt/svndata。这样,/就是表示对全部版本库设置权限。(就是在svnserve –d –r /opt/svndata指定了) 

repos1:/,表示对版本库1设置权限 

repos2:/abc, ,表示对版本库2中的abc项目设置权限 

repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限 

权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。 

示例: 

[groups] 

admin = alan 

[/]

@admin = rw 

[repos1:/abc/aaa] 

king = rw

[repos2:/pass] 

king = 

注:svnserve配置文件概述  

svnserve.conf,svn服务配置文件;passwd,用户名口令文件,该文件名在文件svnserve.conf中指定,缺省为同目录下的;auth,权限配置文件,缺省为同目录下。这两个文件路径都可以在svnserve.conf中指定。更改svnserve.conf 时,需要重起SVN,更改authz,passwd 文件时不需要重启

7)导入文件源代码

svn import /share/www file:///opt/svndata/repos1/test1 -m“注释”

将/share/www下的代码导入repose1库中,项目名称为test1。

8)重启SVN 命令

[root@localhost ]# lsof -i:3690

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

svnserve 13027 root    3u IPv4 122994      0t0  TCP *:svn (LISTEN)

[root@localhost ]# kill -9 13027

[root@localhost ]#svnserve -d -r /svn/project  

提示:当更改svnserve.conf 时,需要重起SVN,更改authz,passwd 文件时不需要重起  

9) 客户端  

到此服务配置完毕,在windows安装TortoiseSVN就能用了

10)Apache的配置 

如果想使用apache登录的话就需要添加一下配置

安装Apache的svn模块 

$yum install mod_dav_svn  

修改Apache配置,确认httpd.conf中包含Include conf.d/*.conf 

vi /etc/httpd/conf.d/subversion.conf  默认subversion.conf是有的,没有的话就在modules文件夹中看看有没有mod_dav_svn.so,mod_authz_svn.so 如果有就在http.conf中添加

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so

如果没有就说明模块安装不正确。

单个版本库: 

<Location /svn>     #这个应该定位用的,在浏览器地址栏的地址在哪里 

DAV svn    

SVNPath  /svn/project/www        (指明资源库的路径) 

AuthType Basic                    (认证类型为基本认证 ) 

AuthName "Subversion repository”(密码认证时的标题,随意)

AuthUserFile  /svn/passwd          (认证密码文件位置htpasswd密码)

AuthzSVNAccessFile /svn/authz   (目录权限文件位置)

Require valid-user                 (要求验证用户,即不能匿名访问)

</Location>     

多个版本库:  

<Location /svn>    

DAV svn    

SVNListParentPath on          (打开这个选项可以列出ParentPath下面的所有库) 

SVNParentPath /svn/svnroot      (如果有多个库,使用该选项) 

AuthType Basic    

AuthName " Subversion repository "    

AuthUserFile /svn/passwd    

AuthzSVNAccessFile /svn/authz   

Require valid-user    

</Location>    

注意: 

(1)单个版本库就是SVNPath /svn/project/www【这个是对单个版本库】,多个版本库知道的主目录,我这就是 SVNParentPath /svn/project 

(2)AuthzSVNAccessFile是权限控制文件,单个版本库不需要,多个版本库要设置不同版本库的权限要重启apache服务器 

11)Apache验证方式

htpasswd -c /svn/passwd abc创建用户abc并按照提示设置密码,网页认证的时候使用该用户名和密码登录。后面再添加用户的时候去掉-c选项。       配好以后就可以通过Http页面来访问SVN了。注意密码和SVN服务器提供的是不一样的哦。 

注:下面是一些htpasswd语法在apache安装目录下找到bin目录,该目录下有htpasswd执行文件 htpasswd -cmb /svn/passwd abc 123456 

c  :create m:md5 

:在命令行上输入密码 

解释:创建userfile文件,增加用户名为abc的用户,密码为md5加密的123456 更新密码 

htpasswd userfile abc 添加新用户 

htpasswd userfile xyz 删除用户 

htpasswd -D userfile xyz 生成.htaccess 

htpasswd -c .htaccess user  

如果通过网页登录不了的话,可能要关掉selinux 关闭的方法:  setenforce 0  

实际上关了好像不太好

二、Svn常用命令

导出项目:svnadmin dump/var/svn/pro1 > /mydata/pro1.backup

导入项目:

新建项目库:svnadmin create/var/svn/pro1/

执行导入:svnadmin load/var/svn/pro1/ < /mydata/pro1.backup

导入版本:svn import 需要导入的版本路径file://svn/test/aa -m”aa”

 

svn cat       # 显示特定版本的某文件内容。

svn list      # 显示一个目录或某一版本存在的文件列表。

svn log       # 显示svn 的版本log,含作者、日期、路径等。

svn log test.c  #查看文件test.c的日志修改信息。

svn diff      # 显示特定修改的行级详细信息。

svn diff -r 15:16 file:///svn/test1/   #版本15与版本16之间的差异

svn diff -r 5:6 text.c #比较版本5和版本6之间的text.c文件的变化。

svn cat -r 4 test.c     #查看版本4中的文件test.c的内容。