svn服务器有2种运行方式
1.独立服务器 (例如:svn://xxx.com/xxx);
2.借助apache。(例如:http://svn.xxx.com/xxx);为了不依赖apache,选择第一种方式-独立的svn服务器。
svn存储版本数据有2种方式
1.bdb;
2.fsfs。
因为BDB方式在服务器中断时,有可能锁住数据(搞ldap时就深受其害,没法根治),所以还是FSFS方式更安全一点,我也选择这种方式。
安装SVN包
$ yum install subversion
验证版本
$ svnserve --version
svnserve, version 1.6.11 (r934486)
创建版本仓库
$ svnadmin create /disk/svndata/firstsvn 目录/版本库/项目
$ svnadmin create /disk/svndata/firstsvn1 目录/版本库/项目1
$ svnadmin create /disk/svndata/firstsvn2 目录/版本库/项目2
版本仓库创建成功后,会在/disk/svn/firstsvn/conf目录下生成三个配置文件:
authz #权限配置
passwd # 用户和口令配置
svnserve.conf # SVN服务配置
配置svnserve.conf
主要有四个配置项,注意保证这些配置行前没有空格。
anon-access = none #非认证用户访问版本库的权限
auth-access = write #认证用户访问版本库的权限
password-db = /disk/svn/firstsvn/conf/passwd #指定用户口令配置文件名
authz-db = /disk/svn/firstsvn/conf/authz #指定权限配置文件名
配置authz
可使用分组管理的方式进行权限配置。1个用户组可以包含1个或多个用户,用户间以逗号分隔。
[groups]
admin = jackie
devteam = iitshare, itblood #devteam 项目组包括两个用户iitshare,itblood
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
[firstsvn:/]
@admin = rw
* = r
[firstsvn:/dev]
@devteam = rw
[firstsvn:/test]
@testteam = rw
配置passwd
[users]
jackie = jackiepwd 用户名和口令
启动SVN服务
$ svnserve -d -r /disk/svn
-d表示后台运行
-r 指定根目录是 /disk/svn
查看后台进程
$ ps -ef | grep svn
root 2983 1 0 09:19 ? 00:00:00 svnserve -d -r /disk/svn
jackie 4570 2496 0 10:51 pts/1 00:00:00 grep svn
配置项目仓库的钩子配置。
cp post-commit.tmpl post-commit
然后编辑post-commitshell脚本,shell命令如下:
cd /data0/htdocs/wwwroot
/usr/bin/svn cleanup
/usr/bin/svn up /data0/htdocs/wwwroot/--username "wwwroot"--password "123456"
如果没有反应,会有两个地方可能出错:
1)配置文件与路径写得不对,可以直接通过手工方式去执行post-commit看看有没有报错。
2)权限不对。即/data0/htdocs/wwwroot权限是否足以满足脚本的读写。chmod +x post-commit
摘在SVN官方网站
bat: SVN强制写注释的hooks脚本(Windows)
@echo off
rem 文件名是: pre-commit.bat,放到repository/hooks目录下
setlocal
set REPOS=%1
set TXN=%2
rem check that logmessage contains at least 10 characters
svnlook log "%REPOS%" -t "%TXN%" | findstr ".........." > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo 提交时必须填写说明! 1>&2
exit 1
Bash: SVN强制写注释的hooks脚本(Linux)
#!/bin/sh
#文件名是: pre-commit,放到/repository/hooks目录下
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
# check that logmessage contains at least 10 alphanumeric characters
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 10 ];
then
echo -e "/nEmpty log message not allowed. Commit aborted!" 1>&2
exit 1
fi
1.独立服务器 (例如:svn://xxx.com/xxx);
2.借助apache。(例如:http://svn.xxx.com/xxx);为了不依赖apache,选择第一种方式-独立的svn服务器。
svn存储版本数据有2种方式
1.bdb;
2.fsfs。
因为BDB方式在服务器中断时,有可能锁住数据(搞ldap时就深受其害,没法根治),所以还是FSFS方式更安全一点,我也选择这种方式。
安装SVN包
$ yum install subversion
验证版本
$ svnserve --version
svnserve, version 1.6.11 (r934486)
创建版本仓库
$ svnadmin create /disk/svndata/firstsvn 目录/版本库/项目
$ svnadmin create /disk/svndata/firstsvn1 目录/版本库/项目1
$ svnadmin create /disk/svndata/firstsvn2 目录/版本库/项目2
版本仓库创建成功后,会在/disk/svn/firstsvn/conf目录下生成三个配置文件:
authz #权限配置
passwd # 用户和口令配置
svnserve.conf # SVN服务配置
配置svnserve.conf
主要有四个配置项,注意保证这些配置行前没有空格。
anon-access = none #非认证用户访问版本库的权限
auth-access = write #认证用户访问版本库的权限
password-db = /disk/svn/firstsvn/conf/passwd #指定用户口令配置文件名
authz-db = /disk/svn/firstsvn/conf/authz #指定权限配置文件名
配置authz
可使用分组管理的方式进行权限配置。1个用户组可以包含1个或多个用户,用户间以逗号分隔。
[groups]
admin = jackie
devteam = iitshare, itblood #devteam 项目组包括两个用户iitshare,itblood
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
[firstsvn:/]
@admin = rw
* = r
[firstsvn:/dev]
@devteam = rw
[firstsvn:/test]
@testteam = rw
配置passwd
[users]
jackie = jackiepwd 用户名和口令
启动SVN服务
$ svnserve -d -r /disk/svn
-d表示后台运行
-r 指定根目录是 /disk/svn
查看后台进程
$ ps -ef | grep svn
root 2983 1 0 09:19 ? 00:00:00 svnserve -d -r /disk/svn
jackie 4570 2496 0 10:51 pts/1 00:00:00 grep svn
配置项目仓库的钩子配置。
cp post-commit.tmpl post-commit
然后编辑post-commitshell脚本,shell命令如下:
cd /data0/htdocs/wwwroot
/usr/bin/svn cleanup
/usr/bin/svn up /data0/htdocs/wwwroot/--username "wwwroot"--password "123456"
如果没有反应,会有两个地方可能出错:
1)配置文件与路径写得不对,可以直接通过手工方式去执行post-commit看看有没有报错。
2)权限不对。即/data0/htdocs/wwwroot权限是否足以满足脚本的读写。chmod +x post-commit
摘在SVN官方网站
bat: SVN强制写注释的hooks脚本(Windows)
@echo off
rem 文件名是: pre-commit.bat,放到repository/hooks目录下
setlocal
set REPOS=%1
set TXN=%2
rem check that logmessage contains at least 10 characters
svnlook log "%REPOS%" -t "%TXN%" | findstr ".........." > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo 提交时必须填写说明! 1>&2
exit 1
Bash: SVN强制写注释的hooks脚本(Linux)
#!/bin/sh
#文件名是: pre-commit,放到/repository/hooks目录下
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
# check that logmessage contains at least 10 alphanumeric characters
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 10 ];
then
echo -e "/nEmpty log message not allowed. Commit aborted!" 1>&2
exit 1
fi