svn利用钩子脚本功能实现代码同步到web目录

一、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时代的人,
想法跟我们是有区别的。

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1655385

时间: 2024-11-01 18:04:31

svn利用钩子脚本功能实现代码同步到web目录的相关文章

flash教程:利用AS脚本功能实现图片模糊变清晰

核心提示:在一些片头动画里我们经常能看到很炫的模糊变清晰的特效动画,极具视觉冲击. 在一些片头动画里我们经常能看到很炫的模糊变清晰的特效动画,极具视觉冲击.高质量的模糊效果大多利用Photoshop处理后才导入Flash中,然后利用AS脚本功能来实现图片模糊变清晰的变化效果,效果很不错. 首先用Photoshop制作两张图.一张清晰的的,一张模糊的(可以用Photoshop的高斯模糊滤镜). 把两张图片导入到FLASH中,分别建立三个图层,顺序依次为:清楚的图片(最下面).模糊的图片(在中间).

利用VBS脚本修改联想笔记本BIOS密码的代码分享

这篇文章主要介绍了利用VBS脚本修改联想笔记本BIOS密码的实现代码,感觉这不科学!无意中找到的一些资料,喜欢的朋友可以试试   这不科学!无意中找到的一些资料: vbs 代码: 复制代码 代码如下: strComputer = "." Set objWMIService = GetObject("winmgmts:" & strComputer & "rootWMI") ' Obtain an instance of the t

有木有大神提供一下android中利用Service后台服务进行手机截屏功能的代码?

问题描述 有木有大神提供一下android中利用Service后台服务进行手机截屏功能的代码? 有木有大神提供一下android中利用Service后台服务进行手机截屏功能的代码,?跪求!是在已经root权限下的

svn post-commit钩子实现代码上传到web目录例子

说明 最近在window下用虚拟机装了一个ubuntu系统,搭建好了PHP环境,为了在window下方便查看代码,于是想搭建个svn,直接将代码提交到对应的web目录下,于是用到了SVN的钩子, svn目录:/home/svn 站的目录:/var/www/html 实现 1.找到svn项目的hooks目录,这里是/home/svn/hooks.目录中默认会几个对应操作的钩子模板,我们需要创建一个post-commit的文件 2.新建post-commit,内容如下 #!/bin/sh REPOS

svn post-commit钩子实现代码上传到web目录

说明 最近在window下用虚拟机装了一个ubuntu系统,搭建好了PHP环境,为了在window下方便查看代码,于是想搭建个svn,直接将代码提交到对应的web目录下,于是用到了SVN的钩子, svn目录:/home/svn 站的目录:/var/www/html 实现 1.找到svn项目的hooks目录,这里是/home/svn/hooks.目录中默认会几个对应操作的钩子模板,我们需要创建一个post-commit的文件 2.新建post-commit,内容如下 #!/bin/sh REPOS

利用Python 脚本生成 .h5 文件 代码

利用Python 脚本生成 .h5 文件  1 import os, json, argparse 2 from threading import Thread 3 from Queue import Queue 4 5 import numpy as np 6 from scipy.misc import imread, imresize 7 import h5py 8 9 """ 10 Create an HDF5 file of images for training

多台tomcat服务器之间实现代码同步,Javaweb的

问题描述 多台tomcat服务器之间实现代码同步,Javaweb的 10C 请问一下如何在多台tomcat服务器之间实现代码同步,就是说一台服务器上的Javaweb项目,和另一台服务器上的Javaweb项目进行实时同步,一旦一台更新,另一台也自动更新:需要详细点的步骤,最好有个例子:小弟C币不是很多,菜鸟一个,谢谢! 解决方案 我们这都是把项目编译好的文件放到中间服务器,因为是linu系统.用脚本自动更新重启!你们也可以自己写个脚本自动更新 解决方案二: 写个脚本,将文件拷贝过去,让那后再写个脚

利用Shell脚本实现远程MySQL自动查询

下面这个脚本是一个简单用来执行远程数据库查询的命令,相信大家都能看得懂,这对于有些需要每天自动检查数据库或是执行某些语句的兄弟,是很有帮助的,只要稍加修改就可以 复制代码 代码如下: #!/bin/sh HOST=192.168.5.40 USER=abc PASS=123456 QUERY=`mysql -h$HOST -u$USER -p$PASS << EOF use testdb; select * from person where name='LiMing'; exit EOF`

利用shell脚本提高效率(切换用户不需要输入密码)

一.简便切换用户: 切换用户,每次输入密码,比较麻烦,可以使用脚本交互式登录实现,每次只要输入./su_ 并tab,执行此脚本,即可切换至root用户,比较简单.如下: hao@hao-ubuntu:~$ cat su_root.sh  #!/usr/bin/expect set timeout 3 spawn su expect "Password:" exec sleep 1 send "root\r" expect "#" interact