Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。
SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。
虽然现阶段git普遍流行,但是svn还是对于权限的控制,和并不需要分布式的公司与团体还是非常好用的。
下面介绍使用yum 来安装svn
[root@lgy home]# yum install subversion
创建svn的库
[root@lgy home]# mkdir -p svn/php
[root@lgy home]# ls
liu svn www
[root@lgy home]# cd svn/
[root@lgy svn]# ls
php
初始化 创建svn的配置文件
[root@lgy svn]# svnadmin create /home/svn/php
[root@lgy svn]# ls
php
[root@lgy svn]# cd php/
查看svn的配置文件
[root@lgy php]# ls
conf db format hooks locks README.txt
[root@lgy php]# cd conf/
[root@lgy conf]# ls
authz passwd svnserve.conf
创建用户权限 [/] 为当前库权限 [/tech/php]为库下文件夹权限
*= 表示除配置人外都没有权限
也可以使用groups 用户组权限 我没操作 可以百度一下
[root@lgy conf]# vim authz
设置密码
[root@lgy conf]# vim passwd
配置服务文件
[root@lgy conf]# vim svnserve.conf
打开
anon-access = read修改成none确保位配置的人都无法读
auth-access =write
password-db =passwd
authz-db = authz
realm = php//这个是写库的名字 也可以不去掉注释
注意:这几项一定要顶格写 前面不能有控制 否则会出错
启动svn服务器
[root@lgy conf]# svnserve -d -r /home/svn
关闭svn服务器
[root@lgy conf]# killall svnserve
windows端测试一下
右键选择检出
填写用户名 密码 就是我们在passwd里面设置的
好检出成功
可以在版本库里面分成多个文件夹 在authz权限设置里面设置权限
比如 我的库为php 我要控制php库下面的 /tech/app文件夹权限
# vim authz
在里面增加
[/tech/app]
zhangsan = rw
*=
这样除了根目录管理员 和张三 其他人都不能操作。
继续介绍svn的hooks 钩子功能。
如果我们想本地svn直接提交到测试服务器就可以直接测试,那么我们就需要svn的hooks钩子功能,很简单。下面来看实现
[root@lgy php]# cd /home/svn/php
[root@lgy php]# ls
conf db format hooks locks README.txt
[root@lgy php]# cd hooks
[root@lgy hooks]# ls
//出现下列文件
post-unlock.tmpl pre-unlock.tmpl post-commit.tmpl pre-commit.tmpl start-commit.tmpl post-lock.tmpl pre-lock.tmpl post-revprop-change.tmpl pre-revprop-change.tmpl
[root@lgy hooks]# cp post-commit.tmpl post-commit
[root@lgy hooks] vim post-commit
填写如下图
看我以前总监写的是
$SVN_PATH update svn://127.0.0.1/php/tech/php $DEV_PATH --username webser --password 123456 --no-auth-cache 但是我写成这样报错为svn://127.0.0.1不是本地路径 于是我去掉了。发现可以跟shell一样运行,也没有问题
填好后我们测试一下
[root@lgy hooks] ./post-commit
成功
在本地用SVN 上传个文件试一下。
发现目标目录下有则成功。