svn钩子(hooks)

首先你须要搭建出本身的svn环境出来,并能成功导入导出,而且了解svn,这是看这篇文章的前提....  web

     出于公司开发部须要svn同步更新服务器代码,须要用到svn钩子(hooks)技术,之前历来没听过,没办法只能google了,google半天再一次认同了一个道理:天下文章一大抄啊,东拼西凑终于算是完成了(为啥说算是呢?svn太强大了我所作的只是一点点),很少说了,上例子:shell

咱们公司的部署很简单(svn服务和web服务在同一台主机上):服务器

开发 ----- svn(存储)---- 线上服务器svn

之前是这样(没有用到hooks时):post

开发部commit一个文件,线上服务的web文档并不一样步,而是须要在svn服务上执行测试

svn update命令后才能同步。网站

如今是这样(用到hooks后):google

开发部commit一个文件,线上服务(web目录)同步数据,不须要svn update命令了,这样就减小了中间的一个小繁琐,别看这只是一个小动做可是省了一大麻烦(对于web开发工程师来讲尤为这样,你想啊,代码常常改,还得常常svn update,老是一件事来回来回,烦不烦啊,是吧!)开发

咱们须要同步的网站目录是(固然以前在svn服务器上已经存有assets目录文件了):文档

这样就先在webdir目录下创建一个assets目录(记得切换到webdir目录下),并运行

运行完这条命令后在webdir下面就检出了svn服务器上的assets目录了(里面有网站文件),这样作就至关于把web目录作成客户端目录了;

那么怎么利用hooks实现数据同步呢?接下来

看到了绿色文件了吗?!这里面其实就是一个shell脚本:

其中的DIR变量存着须要同步的目录,利用svn update命令加上用户名、密码就能同步了(我作的也就只能这么简单,莫怪兄弟啊!),主要看上幅图,有不少.tmpl结尾的文件,这些就是hooks模板了,post-commit这个文件名不要更改(须要给它执行权限)

通过这几步后,不须要手动执行这个post-commit脚本就能够完成开发部所须要的要求了!

为何这样呢?套用网上的话(我也抄了,sorry啊!):

post-commit
在提交完成,成功建立版本以后执行该钩子,提交已经完成,不可更改,所以本脚本的返回值被忽略。

post-lock
对文件进行加锁操做以后执行该脚本

post-revprop-change
在修改 revision 属性以后,执行该脚本。由于修改稿已经完成,不可更改,所以本脚本的返回值被忽略(不过实际上的实现彷佛是该脚本的正确执行与否影响属性修改)

post-unlock
对文件进行解锁操做以后执行该脚本

pre-commit
在 Subversion transaction 完毕以后,在提交以前,执行该脚本

pre-lock
对文件进行加锁操做以前执行该脚本

pre-revprop-change
在修改 revision 属性以前,执行该脚本

pre-unlock
对文件进行解锁操做以前执行该脚本

start-commit
在客户端尚未向服务器提交数据以前,即尚未创建 Subversion transaction(缩写为 txn) 以前,执行执行该脚本

具体到咱们的应用场景,咱们要实现一个同步的测试服务器,咱们只须要在一个用户执行完毕一个commit提交操做以后,让钩子程序去自动更新测试服务器的文件便可!

 

 

附上我所作的svn目录介绍:

192.168.1.20就是咱们公司内部服务器了(svn+web),svn的根目录就是svndate(svndate就是版本目录了,直接用svn客户端访问192.168.1.20就行)

他的auth文件是(这样就能看出来svndate就是根目录了,注意document目录,前面的图里面出现过):

相关文章
相关标签/搜索