zoukankan      html  css  js  c++  java
  • svn 的使用(二)

    这篇主要介绍下 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可运行的权限就能够了。)
    之后我们就能够以此,类推出其他想要实现的功能了。














  • 相关阅读:
    ES 使用小结
    TruncateATable 清除一张表
    js 排序,去重
    读高性能JavaScript编程 第四章 Conditionals
    读高性能JavaScript编程 第四章 Duff's Device
    c# AOP 文章地址
    String、StringBuffer与StringBuilder之间区别
    批处理命令
    C#中的is和as操作符
    c# 入门
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7045072.html
Copyright © 2011-2022 走看看