在做版本的时候,需要SVN做一些自动化的事情,比如提交前自动更新;提交一些文件后关联着提交另一些。所以需要写一点自动化脚本。
什么是SVN钩子
官方说法:
钩子是通过版本库事件触发,例如新版本的创建或一个未版本化属性的修改。一些钩子(叫做“pre hooks”)在事件发生前运行,可以用来报告发生了什么以及防止它发生。还有一些钩子(“post hooks”)在版本库事件之后发生,只是用来报告。每个钩子能够获得事件的足够信息,例如提出的(或完成的)版本库修改细节,还有触发事件的用户名
SVN钩子的使用
以web目录:/usr/share/nginx/html 、svn版本库目录:/var/svn/project 为例:
在 /var/svn/project/hooks下新建 post-commit 文件
[root@VM_0_4_centos hooks]# vim post-commit
并加入以下内容
#!/bin/sh
EPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
SVN=/usr/bin/svn #这里配置的是svn安装bin目录下的svn文件
WEB=/usr/share/nginx/html #要更新的目录
$SVN update --username svn库用户名 --password svn库密码 $WEB
保存后,给post-commit加执行的权限
[root@VM_0_4_centos hooks]# chmod a+x post-commit
基本到这就已经OK了
测试:
/usr/bin/svn update –usename svn库用户名 –password svn库密码 /usr/share/nginx/html
如果能正常update就已经ok了
我的因为web目录下之前就已经有文件了,会和库中的版本冲突
下面是解决方法
SVN报错:Node remains in conflict显示冲突的解决办法
如果是提示文件冲突:
svn revert –depth=infinity 有冲突的文件名
如果提示目录有冲突:
svn revert –depth=infinity 目录名
拓展:
svn有9种钩子,上面只是其中一种