钩子脚本的具体写法和shell脚本写法是一样的。钩子脚本就是被某些版本库事件触发的程序,例如:创建新版本或修改未被版本控制的属性,每个钩子都能掌管足够的信息来了解发生了什么事情,操作对象是什么以及触发事件的用户账号。根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起。
默认情况下,钩子的子目录中包含各种版本库钩子模板
![0e9231eec92a19984574d90d36ab1167.png](https://img-blog.csdnimg.cn/img_convert/0e9231eec92a19984574d90d36ab1167.png)
如果想使用将后面的.tmpl去掉即可。
常用钩子模板:
post-commit 在提交完成成功创建版本之后执行该钩子,提交已经完成,不可更改。
pre-commit 提交完成前触发执行该脚本
start-commit 在客户端还没有向服务器提交数据之前,及没有建立Subversion transaction 之前。
工作上通过pre-commit来限制文件的扩展名及大小以及注释
cp pre-commit.tmpl pre-commit
chmod 700 pre-commit
![810cb3364b5c8f3fcf9f5966399a3fb3.png](https://img-blog.csdnimg.cn/img_convert/810cb3364b5c8f3fcf9f5966399a3fb3.png)
#!/bin/shexport LANG=en_US.UTF-8 REPOS="$1"TXN="$2"#此处更改大小限制,这里是5MMAX_SIZE=5242880#此处增加限制文件后缀名FILTER='.(zip|rar|o|obj|tar|gz)$' SVNLOOK=/usr/bin/svnlook LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c` if [ "$LOGMSG" -lt 9 ]then echo "Please enter more than 8 characters of submission description" 1>&2 exit 1fi files=$($SVNLOOK changed -t $TXN $REPOS |cut -d " " -f 4-) rc=0 echo "$files" | while read f;doif echo $f|tr A-Z a-z|grep -Eq $FILTER;thenecho "File in ($FILTER) format is not supported" >&2exit 1;fi filesize=$($SVNLOOK cat -t "$TXN" "$REPOS" "$f" | wc -c) if [ "$filesize" -gt "$MAX_SIZE" ]thenecho "File is not allowed to be greater than 5m" >&2exit 1fidone
如图输入字符不够提示
![e403d406edfe848eefa19954d0319fa9.png](https://img-blog.csdnimg.cn/img_convert/e403d406edfe848eefa19954d0319fa9.png)
![98737129a2498089e999ec943f6ef901.png](https://img-blog.csdnimg.cn/img_convert/98737129a2498089e999ec943f6ef901.png)
使用post-commit 将代码同步到code_manager里
![540268178ee4ec917a2e40eaed1ba328.png](https://img-blog.csdnimg.cn/img_convert/540268178ee4ec917a2e40eaed1ba328.png)
svn co svn://192.168.148.130/ad_industry/trunk/ /home/code_manager --username=xcc --password=123
![186c1792383f16ddb325dec4610df982.png](https://img-blog.csdnimg.cn/img_convert/186c1792383f16ddb325dec4610df982.png)
已经拷贝到里面
![705402436e9c984a9c4df8a24018c019.png](https://img-blog.csdnimg.cn/img_convert/705402436e9c984a9c4df8a24018c019.png)
拷贝一份post-coomit
cp post-commit.tmpl post-commit
我这里使用winScp来修改post-coomit
添加如下信息
export LANG=en_US.UTF-8 SVN=/usr/bin/svn STATIC_DIR=/home/code_manager/toutiao_project$SVN update $STATIC_DIR --username xcc --password 123 --no-auth-cache export LANG=en_US.UTF-8 SVN=/usr/bin/svn STATIC_DIR=/home/code_manager/toutiao_project$SVN update $STATIC_DIR --username xcc --password 123 --no-auth-cache
注意mailer 那行要注释掉
![45306d9a0e1cb947628121f014724483.png](https://img-blog.csdnimg.cn/img_convert/45306d9a0e1cb947628121f014724483.png)
修改post-commit权限
chmod 700 post-commit
![e5f430a80f508846592579518a5569b7.png](https://img-blog.csdnimg.cn/img_convert/e5f430a80f508846592579518a5569b7.png)
现在文件里没有Hello.java
![9ee851dd4acdce00d14304592886c65d.png](https://img-blog.csdnimg.cn/img_convert/9ee851dd4acdce00d14304592886c65d.png)
eclipse提交Hello
![062b43c9b7fd510a2beaed7d21d92148.png](https://img-blog.csdnimg.cn/img_convert/062b43c9b7fd510a2beaed7d21d92148.png)
提交后,会自动更新
![9c6faf95a4fea072a5da64ba3cc85215.png](https://img-blog.csdnimg.cn/img_convert/9c6faf95a4fea072a5da64ba3cc85215.png)
由于安全问题,Subversion版本库在一个空环境中执行钩子脚本--就是没有任何环境的变量,甚至没有$PATH或者%PATH%。由于这个原因,许多管理员会感到困惑,他们的钩子脚本手动运行时正常,但是在Subversion中却执行不了。要注意:必须在钩子脚本中设置好环境变量或者写绝对路径。