LINUX 创建SVN,与WEB目录同步

1:创建SVN服务

安装subversion

centos: yum install subversion

ubuntu: apt-get install subversion


2:开始搭建SVN服务
        2.1 mkdir /www/svndata                 //建立版本库目录
        svnserve -d -r /www/svndata/              
        2.2 svnadmin create /www/svndata/site              //创建一个新的Subversion项目
        2.3 修改配置
        cd /www/svndata/site/conf/          

        
        配置允许用户访问
        vi svnserve.conf
        anon-access=none
        auth-access=write
        password-db=passwd
        注:修改的文件前面不能有空格,否则启动svn server出错
        配置密码文件
        vim passwd
        [users]
        # harry = harryssecret
        # sally = sallyssecret
        appteam = app123
        manager = manager
        配置登录认证文件
        vi authz
        [groups]
        appm = appteam,manager
        [/]
        @appm = rw
        * = r
        或者直接最后添加
        [/]
        appteam = rw


3.将WEB目录文件导入版本库

 svn import WEB目录 file:///usr/local/svn/newrepos/some/project  -m "Initial import"


4.建立同步脚本

    4.1  hooks(钩子)文件说明:
        # start-commit 提交前触发事务
        # pre-commit 提交完成前触发事务
        # post-commit 提交完成时触发事务

        # pre-revprop-change 版本属性修改前触发事务
        # post-revprop-change 版本属性修改后触发事务
        cp post-commit.tmpl post-commit
        编辑post-commit,在文件最后添加以下内容
        复制代码

   export LANG=zh_CN.UTF-8
        REPOS="$1"
        REV="$2"
        SVN_PATH=/usr/bin/svn
        WEB_PATH=/mnt/......./www
        LOG_PATH=/tmp/svn_update.log
        $SVN_PATH update --username username --password password $WEB_PATH --no-auth-cache
        echo "nnn##########开始提交 " `date "+%Y-%m-%d %H:%M:%S"` '##################' >> $LOG_PATH
        echo `whoami`,$REPOS,$REV >> $LOG_PATH
        $SVN_PATH update --username username --password password $WEB_PATH --no-auth-cache >> $LOG_PATH
        chown -R www:www
$WEB_PATH


        增加脚本执行权限

        chmod +x post-commit

        chmod 777 post-commit

        最后操作是关闭服务然再打开服务:
        svn服务的关闭:
        killall svnserve
        svn开启:

        svnserve -d -r /www/svndata

   可以使用 ./post-commit 测试有效性

   为避免WEB目录跟SVN不一致,删除WEB目录,将之前导入到SVN的代码恢复到WEB目录即可;


实例:

-------------------------------------------------------------------------------------------------------

   post-commit:

   export LANG=zh_CN.UTF-8
        WEB_PATH=/www/webdir/
        /usr/bin/svn update --username username --password password $WEB_PATH --no-auth-cache
        chown -R www:www $WEB_PATH


   导入:WEB目录代码导入到SVN     svn import /www/webdir/ file:///svndata/www/ -m "Initial import"

        检出:SVN代码到WEB目录     svn co svn://IP/www/
      -------------------------------------------------------------------------------------------------------


        测试:svn  checkout  svn://localhost/site
        修改端口
        svnserve -d -r 项目路径 --listen-port 21
        SVN自动同步程序执行流程:
        1、用户提交文件到SVN服务器,提交操作成功后触发post-commit脚本
        2、在post-commit版本文件中使用php_script.php执行PHP脚本
        3、在PHP脚本中通过exec系统调用更新服务器上的版本库工作副本
        4、根据更新操作结果日志,对另一个SVN版本库进行对应的操作处理


      温馨提示:

        1:修改post-commit文件;

            注释所有,加入

            export LANG=zh_CN.UTF-8
             WEB_PATH=/www/webdir/
             /usr/bin/svn update --username username --password password $WEB_PATH --no-auth-cache
             chown -R www:www $WEB_PATH

      2:WEB目录导入版本库

            svn import WEB目录 file:///usr/local/svn/newrepos/some/project  -m "Initial import"

      3:SVN代码检出到WEB目录,保证SVN代码可以跟WEB目录保持一致的版本;

          svn  checkout  svn://localhost/site