ubuntu 安装 svn
? svn ? ? shell ?    2019-01-11 16:17:34    760    0    0
gua_l   ? svn ? ? shell ?

一个集中式版本控制工具

--通过在WORKING COPY (本地工作副本)  里增删改的提交(COMMIT)来改变版本库的内容, 通过更新(UPDATE)到WORKING COPY来获取他人的提交。每一次提交新增一个全局版本号。每个版本号代表着当前版本库的一个全局版本。

--支持分支管理(BRANCH/MERGE/SWITCH), 基线管理(TAG), 版本回退(REVERT), 冲突解决(RESOLVE  CONFLICTS)过程记录(HISTORY)。

--支持钩子脚本 : 与许多版本库版本控制系统一样,SVN 也支持hook 脚本:即在特定事件触发之前或之前执行的特定操作 。比如在 commit 之前执行检测 message 命令 。在 commit 之后执行发送邮件命令。

版本库搭建

参考 http://subversion.apache.org/packages.html

各系统的安装命令略有差异,详见官网链接,以下以ubuntu上的安装进行搭建。

工具安装

$ apt-get install subversion
$ apt-get install libapache2-svn​

版本库创建

mkdir /var/svn/Auto_script
svnadmin create /var/svn/Auto_script​

 

目录结构

一个 SVN 版本库初始化之后,会有在目录下生成一些配置目录。

conf/:
authz hooks-env.tmpl passwd svnserve.conf

db/:
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

hooks/:
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

locks/:
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 //指定使用哪个文件的根限控制策略

启动SVN服务 

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

 

踩过的坑

1.启动失败

启动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

2.认证失败 authentication failed

三个配置文件行前不要留下空格
启动的路径为 svnserve -d -r /var/svn 。一开始直接启动到/var/svn/Auto_script就一直认证失败,查找说是authz文件里的权限设置问题,书写没有错,那就是相对路径[Auto_script:/]有误,于是尝试将[Auto_script:/]改为[Auto_script:\],仍认证失败,在[\]基础上重新以启动上一层目录,便能成功访问。似乎是单仓库和多仓库对启动目录和权限[\]的写法有不同规定。

3.Hooks pre-commit 失败

报svn: E165001: Commit blocked by pre-commit hook (exit code 255) with no output
任何提交都无成功,报错,除非把pre-commit文件拿走。想到可能是格式问题,pre-coommit是从wins写好拷进去的,执行了dos2uinx仍不行,于是老实linux目录下的模板pre-commit.temp重命名并重新编辑。就可以顺利提交。

4.Hooks pre-commit 无效

但是提交后发现钩子脚本无效,即使空日志也能成功提交。
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 后的方括号用空格与内容隔开。
重新提交,脚本生效

 

Pre: svn 定时自动提交

Next: svn sync : dump

760
Sign in to leave a comment.
No Leanote account? Sign up now.
0 comments
Table of content