天天看点

SVN配置 - 钩子(Hooks)提交后自动同步钩子的目的钩子文档钩子的使用

首先要详细学SVN的话:

SVN BOOK 中文

这本书是一定要先读的。

钩子的目的

我们面临这样一个问题,就是我们在本地写的代码是个网站,而在修改完之后,提交之后立即在服务器的网址上能看到修改的内容。但是发现服务器上的仓库存储的并不是代码,而是一些配置文件和DB数据。

这个时候就需要钩子了,就是在服务器上重新布置一份代码,让每次在本地提交的时候,都可以更新这份代码。这样子就可以保证实时更新了。

钩子文档

钩子是通过版本库事件触发,例如新版本的创建或一个未版本化属性的修改。一些钩子(叫做“pre hooks”)在事件发生前运行,可以用来报告发生了什么以及防止它发生。还有一些钩子(“post hooks”)在版本库事件之后发生,只是用来报告。每个钩子能够获得事件的足够信息,例如提出的(或完成的)版本库修改细节,还有触发事件的用户名。

默认情况下,hooks子目录中包含各种版本库钩子模板。

$ ls repos/hooks/
post-commit.tmpl      post-unlock.tmpl  pre-revprop-change.tmpl
post-lock.tmpl        pre-commit.tmpl   pre-unlock.tmpl
post-revprop-change.tmpl  pre-lock.tmpl     start-commit.tmpl
           

Subversion会试图以当前访问版本库的用户身份执行钩子。通常,对版本库的访问总是通过Apache HTTP服务器和mod_dav_svn进行,因此,执行钩子的用户就是运行Apache的用户。钩子本身需要具有操作系统级的访问许可,用户可以运行它。另外,其它被钩子直接或间接使用的文件或程序(包括Subversion版本库本身)也要被同一个用户访问。换句话说,要注意潜在的访问控制问题,它可能会让你的钩子无法按照你的目的顺利执行。

钩子的使用

复制一份

post-commit.tmpl

post-commit

,并修改:

post-commit

内容,为:

REPOS="$1"
REV="$2"  
TXN_NAME="$3"  

WEB=/home/alps/judianer #这个地方写你准备放代码的路径
export hljs-number">8
svn update $WEB --username alps --password chen #alps是svn的用户名,chen是svn密码,自己换成自己的。
           

然后现在去你填写的WEB那里的上一层目录,也就是

/home/alps

然后在这里:

这样弄来保存一份代码,然后每次你本地提交的时候,这个文件夹就会执行一次svn update了。

继续阅读