svn添加钩子hooks并解决hooks速度慢。

前几天安装好了SVN,然后想要提交之后直接放到web目录中,可以直接通过web访问页面效果。于是知道了有钩子这么个东西。
假设已经有了svn project,我们需要做一下操作:

  • 在web目录里面checkout对应的代码文件
  • 创建钩子模板并赋予执行权限
  • 敲入钩子文件的内容
  1. checkout代码的文件
    在web目录下创建网站对应的文件夹,我这里直接给文件夹命名为svn,并且checkout

    mkdir /home/wwwroot/svn 
    cd /home/wwwroot/svn
    svn checkout svn://127.0.0.1 ./
    

    完成以后目录下会多了.svn的隐藏文件夹

  2. 创建钩子
    在创建好svn project之后会有如下目录结构。我们的钩子就存放在hooks里面。

    svn目录

    我们需要做下面步骤:

    代码如下:

    cd hooks
    cp post-commit.tmpl post-commit #拷贝一个钩子模板
    chmod 777 post-commit #赋予可执行权限
    vim post-commit
    
  3. 编辑钩子文件
    找到/svn/svntest/hooks/post-commit,
    进入到post-commit编辑状态后,我们最好把里面的内容都给注释。然后敲入以下代码:

    #!/bin/sh
    SVN=/usr/bin/svn #svn执行文件所在的文件夹
    WEB=/home/wwwroot/svn #svn项目所在目录
    LOG_PATH=/svn/svntest/svn_hook.log #我们定义的一个log文件
    echo "------------Start Commit -----------" >> $LOG_PATH
    echo "Time:"`date '+%Y-%m-%d %T'`>>$LOG_PATH #这里是在日志中写入执行的时间
    cd $WEB
    for dir in 'svnlook dirs-changed /svn/svntest'  #查找有修改过的文件,并将修改过的内容部署到web目录
    do
            #下面一句执行update命令
            $SVN  update $WEB --username "aoxiang" --password "aoxiang" >> $LOG_PATH 
    done
    echo "------------Commit End---------------" >>$LOG_PATH
    

    这里解释一下代码:
    我在部署完钩子之后,发现有一个问题:

    在本地commit 到服务器以后,速度都很快显示100%,但是进度条会一直卡在最后不动很长时间。

    我的项目大概400MB,当时就怀疑是钩子的原因,导致commit速度下降。
    最后找到方法:

    先找到有修改的目录,然后将修改的内容部署到web目录,这样就不会把整个项目部署到web目录

    for dir in 'svnlook dirs-changed /svn/svntest' 
    do
        #这里是要执行的代码
    done
    

    svnlook dirs-changed命令用来找打修改过内容的目录

    下面一句就相当于是在我们对应的svn的目录里面执行了update命令

    $SVN update -N $WEB --username "aoxiang" --password "aoxiang" >> $LOG_PATH

以上基本上就ok了。今天主要被上传速度困扰了一天。后来找到方法先检查修改的文件后,顿时就搞定了

评论 0

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*