一,当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除。
find . -type d -name ".svn"|xargs rm -rf
二,开始搭建SVN服务
1,mkdir /www/svndata //建立版本库目录
svnserve -d -r /www/svndata/
2,svnadmin create /www/svndata/site //创建一个新的Subversion项目
3,修改配置
cd /www/svndata/site/conf/
配置允许用户访问
vi svnserve.conf
anon-access=none
auth-access=write
password-db=passwd
注:修改的文件前面不能有空格,否则启动svn server出错
配置密码文件
vim passwd
[users]
# harry = harryssecret
# sally = sallyssecret
appteam = app123
manager = manager
配置登录认证文件
vi authz
[groups]
appm = appteam,manager
[/]
@appm = rw
* = r
或者直接最后添加
[/]
appteam = rw
4,测试》》》
[[email protected] ~]# svn co svn://localhost/site
取出版本 0。
5,实现SVN与WEB同步,可以CO一个出来,也可以直接配在仓库中
1)设置WEB服务器根目录为/usr/local/nginx/html/site(我的默认nginx目录)
2)checkout一份SVN
svn co svn://localhost/site /usr/local/nginx/html/site
修改权限为WEB用户
chown -R www:www /usr/local/nginx/html/site
3)建立同步脚本
cd /www/svndata/kaifa/hooks/
hooks(钩子)文件说明:
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
cp post-commit.tmpl post-commit
编辑post-commit,在文件最后添加以下内容
复制代码
REPOS="$1"
REV="$2"
BASEPATH=/var/www/html/kaifa
WEBPATH="$BASEPATH/"
export LANG=zh_CN.UTF-8
svn update $WEBPATH --username appteam --password app123 --no-auth-cache
echo `date`,`whoami`,$REPOS,$REV >> /www/svndata/site/hooks/svn_hook.log
增加脚本执行权限
chmod +x post-commit
最后操作是关闭服务然再打开服务:
svn服务的关闭:
killall svnserve
svn开启:
svnserve -d -r /www/svndata
测试:svn checkout svn://localhost/site
修改端口
svnserve -d -r 项目路径 --listen-port 21
SVN自动同步程序执行流程:
1、用户提交文件到SVN服务器,提交操作成功后触发post-commit脚本
2、在post-commit版本文件中使用php_script.php执行PHP脚本
3、在PHP脚本中通过exec系统调用更新服务器上的版本库工作副本
4、根据更新操作结果日志,对另一个SVN版本库进行对应的操作处理