鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人
本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结
此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行(需虚拟机联网)
第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)
选择在var路径下创建版本库,当前处于根目录下,一次性创建如下:
svnadmin create /var/svn/svnrepos/xxxx (xxxx为你预期的版本库名称,可自定义)
例: svnadmin create /var/svn/svnrepos/public
cd /var/svn/svnrepos/xxxx/conf
细节修改如下:(希望大家严格按照以下信息,不用参考网络上其他资料)
只需在末尾添加,无需在文件其他部分修改和添加任何东西(请忽略groups被我马赛克的地方,那其实也是条无用的记录,我忘记删掉而已),末尾内容如下:
( 设置哪些用户可以访问哪些目录,向authz文件追加以下内容:
[public:/project] //public库的根目录权限
/ 表示根目录及以下,根目录是svnserve启动时指定的,我们指定的是/var/svn;/ 就是指对全部版本库都具有权限
账号密码文件无需做修改,也是直接将账号和密码信息追加到文件中即可,注意格式为:
原始文件内容,都被注释掉的,我们只需要去掉4条指定内容前注释即可,如下:
大多数网络资料,都会让大家将authz-db = authz这条给去掉注释,经过我本人多次被坑经验,此条去掉后,虽然svn服务器可以连接,但一直会提示“认证失败”,注释掉即可正常
还有多数资料会让大家在realm = My First Repository处填写服务器ip,经过测试,填写后并无什么用处,所以大家去掉注释即可,无需做任何修改
多数情况下服务器安装完成,配置完成后,无法连接svn服务器,均是防火墙问题,大家按照如下3条命令逐一执行即可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
svnserve -d -r /var/svn/svnrepos
[root@localhost /]# ps -ef|grep svn|grep -v grep
root 13465 1 0 01:23 ? 00:00:00 svnserve -d -r /var/svn/svnrepos
[root@localhost /]# netstat -ln |grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
在windows客户端,输入地址:svn://192.168.2.204/public (iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)
到此,Linux下svn服务器搭建就总结完毕,感谢大家的阅读
svn: Unable to connect to a repository at URL 'svn://192.168.2.204/public'
svn: /var/svn/svnrepos/public/conf/svnserve.conf:12: Option expected
错误原因:在刚才去掉注释#号没有将前面空格删除。svnserve.conf文件19行anon-access属性前有个空格,去掉前面的空格再次访问又报“认证失败”,检查了一下配置文件,发 现authz文件的[groups]没有指定访问资源路径,在[groups]下面增加了"[/]"(访问所有资源,也可以指定文件夹,如[/svn/资 料]),问题终于解决了。
经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit
1、找到需要加权限的版本库中hooks目录下的pre-commit.tmpl文件,将其重命名,将后缀去掉,为pre-commit脚本文件。如果没有该文件,则新建脚本pre-commit。
cp -i pre-commit.tmpl ./pre-commit
原来的内容都注释掉,即在没有“#”的代码前加“#”,然后添加下面的内容:
# Make sure that the log message contains some text.
if [ -z `$SVNLOOK log -t "$TXN" "$REPOS" |grep "[a-zA-Z0-9]"` ];then
echo "nLog message cann't be empty! you must input more than 5 chars as comment!." >&2
USER=`$SVNLOOK author -t $TXN $REPOS`
if [ "`echo $ADMINLIST|grep -w $USER|wc -l`" -eq 0 ];then
if [ `$SVNLOOK changed -t $TXN $REPOS |grep "^D "|wc -l` -gt 0 ];then
echo "You Don't have the pemmision of delete!Please contact your administrator!" >&2
SVNLOOK=/usr/bin/svnlook #此处根据你的系统变量而定,你可以通过which svnlook来确定
ADMINLIST=admin,helijie 表示只有admin和helijie这两个用户有删除文件的权限,如果还有其他人,只需用逗号隔开,当然,这些用户名需要在conf下的passwd文件中进行配置