一、hook简单介绍

为了方便管理员控制提交的过程 ,Subversion提供了hook机制。当特定的 事件发生时,相应的 hook会被调用,hook其实就相当于特定事件的处理函数。每个hook会得到与它所处理的事件相关的参数,根据 hook的返回值,Subversion会决定是否继续当前的提交过程

要实际安装一个可用的钩子,你需要在 repos/hooks目录下安装一些与钩子同名(如 start-commit或者post-commit)的可执行程序或脚本。

 

二、本地机器SVN自动更新

1. export方式(备份)

在使用svn客户端时,有可能需要对某一个版本进行本地备份,比如制作成压缩包进行发布,这时候需要从svn文件夹中提取出内容,去除.svn等隐藏的svn配置文件。最笨的方法拷贝一份出来,然后显示隐藏文件,把所有
.svn文件夹都删掉。在svn菜单中,可以找到export命令,这个命令可以将当前svn目录中的内容干净地导出到指定的目录

例如你版本库的svn访问地址是http://10.30.11.12:8080/svn/project1,你想把这个版本库下的/trunk/web文件夹发布到tomcat上,发布到tomcat的文件夹地址是d:/tomcat/opt/web,svn的管理员用户名是abc,密码是12345,那么这个钩子程序应该就是:
svn
export http://10.30.11.12:8080/svn/project1/trunk/web
 d:/tomcat/opt/web --force --username abc --password 12345
--no-auth-cache

注:
--force 是说强制覆盖d:/tomcat/opt/web这个文件夹,避免这个文件夹不为空时报错
--username abc --password 12345 是自动将用户名和密码作为参数传送进去
--no-auth-cache 是说不缓存用户名和密码,这是出于安全考虑

2.update方式

修改hooks/post-commit

export LANG=en_US.UTF-8  
SVN=/usr/bin/svn

STATIC_DIR=/web/root/wwwdeng  #注意权限问题
$SVN update  $STATIC_DIR --username deng --password 123456 --no-auth-cache    

#必须加上--no-auth-cache不然会报错!!

默认使用的shell类型是sh,最好改成bash,sh是bash的子集,centos中sh其实就是软链接到bash

 

3.update和export比较

update会生成一个隐藏.svn文件夹,这个文件夹是我们不需要的,当然了,如果整个发布的内容很多的话,建议还是用update,而不用export,因为update只更新有变化的部分,而export将重新导出所有内容,网络消耗比update大。

 

三、svn实现远程机器自动更新

首先实现A机器通过ssh无密码登陆B机器, 修改A机器的post-commit文件

/usr/bin/ssh -l root  192.168.127.183 "/bin/bash /home/www/svnup.sh"

然后在B机器的/home/www/目录创建svnup.sh可执行文件

/usr/bin/svn update /web/root/code

版本库有提交请求的时候自动会执行post-commit脚本,post-commit脚本通过ssh让远程机器执行shell脚本自动更新svn。

附注:

@echo off并不是DOS程序中的,
而是DOS批处理中的。
当年的DOS,所有操作都用键盘命令来完成,
当你每次都要输入相同的命令时,
可以把这么多命令存为一个批处理,
从此以后,只要运行这个批处理,
就相当于打了几行、几十行命令。

DOS在运行批处理时,
会依次执行批处理中的每条命令,
并且会在显示器上显示,
如果你不想让它们显示,
可以加一个“echo off”

当然,“echo off”也是命令,
它本身也会显示,
如果连这条也不显示,
就在前面加个“@”。

说了这么多,
我觉得非常详细了,
可能你还是不懂。
没有经过DOS时代的人,
想法跟我们是有区别的。

最新文章

  1. WPF整理-XAML构建后台类对象
  2. MyEclipse启动慢的办法
  3. 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)
  4. nodejs初写心得
  5. [Machine Learning] Probabilistic Graphical Models:一、Introduction and Overview(2、Factors)
  6. OPENFILER记下,有空再玩之,ISCSI,以后网络起来了,速度还是应该可以的
  7. 【解决】hive动态添加partitions不能超过100的问题
  8. ListView中添加ScrollView只显示一两行的问题
  9. pyspark 内容介绍(一)
  10. 安卓平台使用pocketSphinx离线语音识别
  11. zoj1494 暴力模拟 简单数学问题
  12. 基于JQuery EasyUI的WebMVC控件封装(含源码)
  13. NOIP2017划水记
  14. H5 音频标签自定义样式修改以及添加播放控制事件
  15. 如何看MySql执行计划explain(或desc)
  16. PC打开多个微信
  17. MySQL死锁分析一例
  18. 归并排序(递归排序and外排排序)
  19. AngularJS 表单数据验证及错误信息提示
  20. java后台面试知识点总结

热门文章

  1. diskpart
  2. vue 打包后app.css,verondor.js文件过大
  3. 堆,栈,内存管理, 拓展补充-Geekband
  4. net.sf.json JSONObject与JSONArray使用实例
  5. 【核心核心】5.Spring【DI】注解方式
  6. PHP SSH2 不支持 IdentityFile
  7. odoo:Actions
  8. 廖雪峰Java10加密与安全-2加密算法-2Base64编码
  9. Java通过接口或者抽象类调用方法的时候,怎么知道调用的是哪个实现类里的方法?
  10. 结构体的sort排序