一、修改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
b :在命令行上输入密码
解释:创建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的内容。