转自我的 blog 二次编辑 :http://blog.leanote.com/post/gua_l/svn-ubuntu-install
各系统的安装命令略有差异,详见官网链接,以下以 ubuntu 上的安装进行搭建。
$ apt-get install subversion
$ apt-get install libapache2-svn
mkdir /var/svn/Auto_script
svnadmin create /var/svn/Auto_script
一个 SVN 版本库初始化之后,会有在目录下生成一些配置目录。
authz hooks-env.tmpl passwd svnserve.conf
current fsfs.conf locks rep-cache.db revs txn-current txn-protorevs write-lock format fs-type min-unpacked-rev revprops transactions txn-current-lock uuid
post-commit.tmpl post-revprop-change.tmpl pre-commit pre-lock.tmpl pre-unlock.tmpl post-lock.tmpl post-unlock.tmpl pre-commit.tmpl pre-revprop-change.tmpl start-commit.tmpl
db.lock db-logs.lock
conf/password 明文创建用户及密码
conf/authz 配置策略 ,包括分组,目录赋权限
conf/svnserve.conf 配置认证策略,及配置文件
[general]
anon-access = none //匿名用户访问权限 有 none/read/write(无、只读、读写)
auth-access = write //认证用户访问权限
password-db =../conf/passwd //如果不同的用同一批用户,可以在另创建一个 password 文件,然后指向同一个文件去读取用户认证信息
authz-db =../conf/authz //指定使用哪个文件的根限控制策略
svnserve -d -r /var/svn 启动后默认绑定 3690 端口
root@tclserver:/var/svn/svn_dir/Auto_script/conf# netstat -apn | grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2599/svnserve
window 客户端 使用 url : svn://x.x.x.x/Auto_script
linux 客户端 使用 svn checkout svn://x.x.x.x/Auto_script
启动 svnserve 时出现 cannot bind server socket:address already in use
停止已启动的服务
Ps –ef |grep svn
Kill -9 进程号
或重新指定端口
netstat –ntlp | grep svn
svnserve -d --listen-port 3691 -r /opt/svndata/repos
Ps –ef |grep svn
三个配置文件行前不要留下空格
启动的路径为 svnserve -d -r /var/svn 。
一开始直接启动到/var/svn/Auto_script 就一直认证失败,查找说是 authz 文件里的权限设置问题,书写没有错,那就是相对路径 [Auto_script:/] 有误,于是尝试将 [Auto_script:/] 改为 [Auto_script:],仍认证失败,在 [] 基础上重新以启动上一层目录,便能成功访问。
似乎是单仓库和多仓库对启动目录和权限 [] 的写法有不同规定。
报 svn: E165001: Commit blocked by pre-commit hook (exit code 255) with no output
任何提交都无成功,报错,除非把 pre-commit 文件拿走。想到可能是格式问题,pre-coommit 是从 wins 写好拷进去的,执行了 dos2uinx 仍不行,于是老实 linux 目录下的模板 pre-commit.temp 重命名并重新编辑。就可以顺利提交。
但是提交后发现钩子脚本无效,即使空日志也能成功提交。
LOGMSG='$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c' if [ "$LOGMSG" -lt 5 ];
调试后发现两个错误
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc –c) If [ "$LOGMSG" -lt 5 ];
单引号改成括号并加 $
If 后的方括号用空格与内容隔开。
重新提交,脚本生效