这篇主要介绍下 svn 钩子的使用,svn 的安装以及配置等能够查看svn 的使用(一)

我们能够在svn创建的仓库目录下看到 hooks 目录。

这里面就存放这个各种svn操作同一时候会运行的脚本文件。

(你能够自己查看每一个脚本文件,文件開始都有英文的介绍包含功能,參数以及返回值。

   我翻译的不好所以就採用网上其他资料的解释吧 - -! )

1.start-commit  開始提交的通知

输入參数:传递给你钩子程序的命令行參数,顺序例如以下:

    1. 版本号库路径

    2. 已经认证过的提交的username

它在提交事务产生前已执行,通经常使用来判定一个用户是否有权提交。返回0表示认证通过。

2.pre-commit 在提交结束之前提醒

输入參数:传递给你钩子程序的命令行參数。顺序是:

     1. 版本号库路径

     2. 提交事务的名称

在事务完毕提交之前执行,通常这个钩子是用来保护由于内容或位置(比如。你要求全部到一个特定分支的提交必须包含一个bug追踪的ticket号,或者是 要求日志信息不为空)而不同意的提交。

无错误返回0。

3.post-commit  成功提交的通知

传递给你钩子程序的命令行參数。顺序为:

     1. 版本号库路径

     2. 提交创建的修订版本

它在事务完毕后执行,创建一个新的修订版本号。无错误程序正常退出。

 

4.pre-revprop-change 版本号属性改动

由于Subversion的修订版本号属性不是版本号化的,对这类属性的改动(比如提交日志属性svn:log)将会永久覆盖曾经的属性值。由于数据在此可能 丢失。所以Subversion提供了这样的钩子(及与之相应的post-revprop-change),因此版本号库管理员可用一些外部方法记录变化。

作 为对丢失未版本号化属性数据的防范。Subversionclient不能远程改动修订版本号属性,除非为你的版本号库实现这个钩子。

5.post-revprop-change 版本号属性改动

这个钩子与pre-revprop-change相应。

其实,由于多疑的原因,仅仅有存在pre-revprop-change时这个脚本才会执行。当这 两个钩子都存在时。post-revprop-change在修订版本号属性被改变之后执行,通经常使用来发送包括新属性的email。版本号库传递四个參数给该 钩子:到版本号库的路径,属性存在的修订版本号。经过校验的产生变化的username,和属性自身的名字。



使用这些钩子最简单的方法就是

拷贝某个脚本,去掉.tmpl扩展名,然后自己定义钩子的内容,确定脚本是可执行的。

PS:一定要确保钩子脚本是可运行的。

并且名称就是去掉.tmpl后的名字。

另外要注意要使用SVN的钩子一定要开设权限,并且是要用执行SVN的账号进行执行这些钩子

(假设不是能够执行的会提示错误,错误代码为255。其它错误能够自行尝试。。)

我想要做的就是 用户commit 后server(測试环境的)自己主动同步 即做update操作

这里我的webserver和svnserver 在一台。(假设是远程的webserver能够在

先使用ssh命令登入



那么我们须要使用的钩子是post-commit

我们能够使用命令

cp post-commit.tmpl post-commit.tmpl.bak

mv post-commit.tmpl post-commit

(别忘了 chmod 设置为可运行的)

chmod 755 post-commit

vi post-commit

这里我们能够先做一个測试

即在文件最后加上一行

/bin/echo "commit" >> /tmp/commit.out

然后运行commit 操作 看一下 commit.out 是不是多了 commit这个单词

那么编写我们的脚本在post-commit 文件最后加入命令

/usr/bin/svn update /www/project --username m0sh1 --password m0sh1

PS:这里要 加上绝对路径 , update 后面的是checkout 下来的项目路径

假设提示错误 svn: Can't convert string from native encoding to 'UTF-8'

则须要加入一行命令

export lang = en_US.UTF-8

此时去工作文件夹看下是不是更新了。。



再举个样例,有非常多开发者为了快,往往忽略掉提交日志信息(也可能无意为之)。那么我们能够在pre-commit脚本

中做出必须提交日志信息的限制:

REPOS="$1"

TXN="$2"



# Make sure that the log message contains some text.

SVNLOOK=/usr/bin/svnlook

$SVNLOOK log -t "$TXN" "$REPOS" | \

   grep "[a-zA-Z0-9]" > /dev/null || exit 1



# Check that the author of this commit has the rights to perform

# the commit on the files and directories being modified.

commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1



# All checks passed, so allow the commit.

exit 0

(上面内容直接就是pre-commit脚本中的内容,那么仅仅须要给pre-commit可运行的权限就能够了。)

之后我们就能够以此,类推出其他想要实现的功能了。






svn 的使用(二)的更多相关文章

  1. SVN的使用二

    一,打开SCM 在xcode中,点击菜单: File -> Source Control –> Repositories 二,连接SVN服务器 1, 2,配置SVN服务器地址(http:/ ...

  2. SVN使用(二)

    TortoiseSVN是windows平台下Subversion的免费开源客户端. 一般我们都是先讲讲服务器的配置,然后再讲客户端的使用,但是在TortoiseSVN上,却可以反过来.因为,如果你的要 ...

  3. (二十六)svn的问题二

    上周五请了一天假,电脑放在公司没有带回来,三天的时间都没有看代码,使得我电脑上的东西与svn上相差了太多,因为不一样,所以就要更新同步,因为要更新同步的东西多,便又出了一些问题,也因此对svn有了更进 ...

  4. 使用python 操作liunx的svn,方案二

    在对liunx操作svn的方式,做了改动,使用python的,subprocess进行操作 在第一种方案中,我使用了先拉到本地,然后再创建,在进行上传,实际在svn中可以直接创建文件,并进行文件复制, ...

  5. SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤

    1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件,或某一个目录下的所有改变.方法就是在想要提交的 ...

  6. SVN随笔记录(二)

    二.TortoiseSVN操作 1.下载,安装,过程中需要勾选x ,目的是为了后期绑定idea 2.如果点击后出现一系列的找不到目标文件提示,重启电脑 3.重启后,绑定仓库路径 4.一般情况输入账号密 ...

  7. SVN & Git (二)

    Git:是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus T ...

  8. 【工匠大道】svn使用总结

    原文地址 SVN(Subversion)是一个自由.开源的项目源代码版本控制工具.目前,绝大多数开源软件和企业代码管理,都使用SVN作为代码版本管理软件. Subversion将文件存放在中心版本库里 ...

  9. MyEclipse10安装Svn插件的几种方法

    http://blog.sina.com.cn/s/blog_4f925fc30102e9xe.html 方法一:直接解压 下载SVN插件:site-1.6.18.zip 解压后将其全部文件拷贝至:D ...

  10. svn报错

    错误一:org.apache.subversion.javahl.ClientException: E155004: There are unfinished work items in 'D:\xa ...

随机推荐

  1. HDU 1087 Super Jumping! Jumping! Jumping!【DP】

    解题思路:题目的大意是给出一列数,求这列数里面最长递增数列的和 dp[i]表示到达地点i的最大值,那么是如何达到i的呢,则我们可以考虑没有限制条件时候的跳跃,即可以从第1,2,3,---,i-1个地点 ...

  2. HDU 1171 Big Event in HDU【01背包】

    题意:给出n个物品的价值和数目,将这一堆物品分给A,B,问怎样分使得两者的价值最接近,且A的要多于B 第一次做的时候,没有思路---@_@ 因为需要A,B两者最后的价值尽可能接近,那么就可以将背包的容 ...

  3. 每个IT安全专业人员应该知道的12种根本漏洞

    每个IT安全专业人员应该知道的12种根本漏洞 每年,IT安全专业人员都面临着数千个新的软件漏洞和数百万个不同的恶意软件程序,但只有12种根本漏洞会让这些软件漏洞和恶意软件程序攻击你的设备.了解这些根本 ...

  4. IPv6理论知识详解

    1. IPv6地址表示 IPv6地址可以表示为128位由0.1组成的字符串,为了便于计算机理解,将128位的二进制字符串表示为32位的十六进制字符串,为了便于理解,人们将其划分为8组,组与组之间用 : ...

  5. LightOJ-1236 Pairs Forming LCM 唯一分解定理

    题目链接:https://cn.vjudge.net/problem/LightOJ-1236 题意 给一整数n,求有多少对a和b(a<=b),使lcm(a, b)=n 注意数据范围n<= ...

  6. 利用shell脚本添加环境变量

    在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误 error while loading shared lib ...

  7. hadoop-11-ambari-server安装

    hadoop-11-ambari-server安装 #ambari 安装yum install ambari-servercd mysql-5.7.18/cp mysql-connector-java ...

  8. ios xcode真机调试获取屏幕截屏

    非常多时候我们须要在调试的过程中把手机屏幕截图发给其它人看,在android开发中我们能够非常方便的截图保存.而xcode开发ios的时候发现这个需求却如此困难.网上大部分都是介绍的以下这个方案.可是 ...

  9. cpc,a wonderful concert

    做完这道题突然就感觉自己脑子是不是已经秀逗了,tle到死后才想起来找规律, 就是求排列数的题目,按插入点对状态进行分类,可以暴力tle... #include<iostream> #inc ...

  10. Random words

    To choose a random word from the histogram, the simplest algorithm is to build a list with multiple ...