阿哥论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 378|回复: 0

CENTOS 搭建SVN服务器(附自动部署到远程WEB)

[复制链接]

2011

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2015-5-20 11:47:35 |显示全部楼层
CENTos 搭建SVN服务器(附自动部署到远程WEB)
安装subversion服务端
  1. # 安装
  2. yum install -y subversion

  3. # 测试是否安装成功 如果显示了版本信息则表示安装成功
  4. svnserve --version;sleep 5s

  5. # svn配置建立svn版本库目录可建多个:
  6. PATHSSS="/home/svn"
  7. echo SVN仓库将创建在:$PATHSSS;sleep 5s

  8. # 新建一个版本库目录
  9. mkdir -p $PATHSSS
  10. cd $PATHSSS
  11. # 建立svn版本库:
  12. svnadmin create $PATHSSS

  13. # 先设置passwd
  14. cat >$PATHSSS/conf/passwd<<ANGIE.K
  15. [users]
  16. jianglinzhi = jianglinzhi
  17. root1 = root
  18. ANGIE.K

  19. # 再设置权限authz
  20. cat >$PATHSSS/conf/authz<<ANGIE.K
  21. [groups] #用户组
  22. admin = jianglinzhi,root1
  23. coder = coders1,coders2,coders3
  24. ui_and_ue = ui1,ui2,ui3
  25. [/] #/仓库权限
  26. @admin = rw
  27. @coder = rw
  28. @ui_and_ue = rw
  29. ANGIE.K

  30. # 最后设定svnserve.conf
  31. cat >$PATHSSS/conf/svnserve.conf<<ANGIE.K
  32. [general]
  33. # 使非授权用户无法访问
  34. anon-Access = none
  35. # 使授权用户有写权限
  36. auth-access = write
  37. # 用户密码文件
  38. password-db = passwd
  39. # 访问控制文件
  40. authz-db = authz
  41. # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。
  42. realm = 姜林志的第一个SNV服务器 欢迎你.
  43. ANGIE.K

  44. # 启动 默认端口 3690
  45. killall svnserve
  46. svnserve -d -r $PATHSSS

  47. # 加入开机启动
  48. echo svnserve -d -r $PATHSSS >> /etc/rc.local
复制代码
导入工程和第一次检出导入到仓库cd 进入工程目录上一级
执行:
  1. #导入前先处理下WIN不支持的文件名 如  : * ? " < > |
  2. # find ./ -name "*\?*" #查找
  3. # find ./ -name "*\?*" -print -exec rm -rf {} \; #删除
  4. # find ./ -name "*\:*" -print -exec rm -rf {} \; #删除
  5. # find ./ -name "*\"*" -print -exec rm -rf {} \; #删除
  6. # find ./ -name "*\<*" -print -exec rm -rf {} \; #删除
  7. # find ./ -name "*\>*" -print -exec rm -rf {} \; #删除
  8. # find ./ -name "*\|*" -print -exec rm -rf {} \; #删除

  9. 提示:如果你设置了pre-commit钩子(比如:强制要求注释,请先解除这个钩子,以免导入失败)

  10. svn import 待导入工程路径(目录) svn://127.0.0.1/定义工程在仓库的目录名字 -m "对于本次操作的注释"
  11. 或者 切换到待导入目录
  12. svn import ./ svn://127.0.0.1/定义工程在仓库的目录名字 -m "对于本次操作的注释"
复制代码
将在仓库中新建工程目录和文件
检出到工程cd 进入工程目录 执行即可
  1. svn co svn://127.0.0.1 ./
复制代码
判定程序员是否为补丁添加注释(per-commit)这个钩子脚本,在每次commit之后会执行,格式是SHELL脚本,是从网上收集来的测试可用
这个文件的详细路径请看下面的cd命令
  1. cd $PATHSSS/hooks
  2. cp per-commit.tmpl per-commit
  3. chmod 755 per-commit
  4. vi $PATHSSS/hooks/per-commit
  5. ###############################################
  6. #!/bin/sh
  7. # PRE-COMMIT HOOK
  8. # .... 中间省略
  9. # http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
  10. REPOS="$1"
  11. TXN="$2"
  12. SVNLOOK=/usr/bin/svnlook

  13. LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
  14. if [ "$LOGMSG" -lt 8 ];#要求注释不能少于8个字符,您可自定义
  15. then
  16. echo -e "\n======================================================" 1>&2
  17. echo -e "\n请在Commit(提交)前为您的补丁添加必要的注释。\n本次提交被忽略。" 1>&2
  18. echo -e "\n======================================================" 1>&2
  19. exit 1
  20. fi
复制代码
自动同步到WEB服务器(post-commit)这个钩子脚本,在每次commit之后会执行,格式是SHELL脚本,是从网上收集来的测试可用
这个文件的详细路径请看下面的cd命令
  1. # 配置自动发布到WEB服务器 编辑 post-commit 文件
  2. cd $PATHSSS/hooks
  3. cp post-commit.tmpl post-commit
  4. chmod 755 post-commit
  5. vi $PATHSSS/hooks/post-commit
  6. ###############################################
  7. #!/bin/sh
  8. # -------------------------------------------------------------------------------
  9. # Filename:    post-commit
  10. # Description: WEB server with synchronization code by SVN
  11. # -------------------------------------------------------------------------------
  12. #Version 1.0
  13. #当用戶把代碼提交完成时,把代碼中的最新更改同步到 WEB服務器,同時注意不包括刪除操作。

  14. #Set variable
  15. SVN=/home/svn
  16. SVNUSER=root1
  17. SVNPASD=root
  18. WEB=/home/ftp/svn #待上传到WEB服务器的文件存放路径 第一次 需要先到该目录检出一次svn co svn://127.0.0.1 ./

  19. WEBIP="192.168.0.23"
  20. RSYNC=rsync
  21. LOG=/home/svn/post-commit.log
  22. export LANG=en_US.UTF-8

  23. mkdir -p $SVN
  24. mkdir -p $WEB

  25. #更新文件到本地文件夹
  26. svn update $WEB --username $SVNUSER --password $SVNPASD
  27. #如果前面的代码成功完成,会继续执行下面的代码
  28. if [ $? == 0 ]
  29. then
  30.     echo ""     >> $LOG
  31.     echo `date` >> $LOG
  32.     echo "##############################" >> $LOG
  33.     chown -R nobody:nobody $WEB
  34.     #同步代码从SVN服务器到WEB服务器 通过RSYNC
  35.     $RSYNC -vaztpH  --timeout=90   --exclude-from=$SVN/exclude.list $WEB root@$WEBIP:$WEB/ >> $LOG
  36. fi
复制代码
完善后的另外一个版本
  1. #!/bin/sh

  2. # POST-COMMIT HOOK
  3. # ... 省略
  4. # http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/

  5. # mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
  6. echo -e "[1 fo 6]================================\n`date`:这次更新将发布到测试和WEB。" 1>&2

  7. # 库的路径
  8. REPOS="$1"

  9. # 新提交的版本号
  10. REV="$2"

  11. changed=$(svnlook changed -r $REV $REPOS)
  12. echo $changed > /home/svn/hooks/last_changed
  13. echo $REPOS >> /home/svn/hooks/last_changed
  14. echo $REV >> /home/svn/hooks/last_changed


  15. ######################################################################################
  16. # 配置自动发布到WEB服务器 编辑 post-commit 文件 ######################################
  17. ######################################################################################
  18. # -------------------------------------------------------------------------------
  19. # Filename:    post-commit
  20. # Description: WEB server with synchronization code by SVN
  21. # -------------------------------------------------------------------------------
  22. #Version 1.1
  23. #当用戶把代碼提交完成时,把代碼中的最新更改同步到 WEB服務器,同時注意不包括刪除操作。

  24. #Set variable
  25. SVN=/home/svn
  26. SVNUSER=root1
  27. SVNPASD=root

  28. # 测试服务器路径
  29. WEB1=/home/ftp/e/ecshop_2013/wwwroot
  30. WEB2=/home/ftp/c/customer/wwwroot

  31. # 远端服务器IP
  32. WEBIP="192.168.1.1"

  33. # 同步方式
  34. RSYNC=rsync

  35. # 同步日志
  36. LOG=/home/svn/post-commit.log

  37. # 避免乱码
  38. export LANG=en_US.UTF-8

  39. mkdir -p $SVN

  40. #更新文件到本地文件夹
  41. svn update $WEB1  --username $SVNUSER --password $SVNPASD
  42. svn update $WEB2  --username $SVNUSER --password $SVNPASD



  43. # 必须要检出成功才开始执行下面的 #####################################################
  44. if [ $? == 0 ]
  45. then
  46.         echo -e "[2 fo 6]================================\n`date`:文件顺利检出到测试项目。" 1>&2


  47. ######################################################################################
  48. # 这里是解析本次操作的文件名 用于提高修改权限的速度 ##################################
  49. ######################################################################################
  50.         echo -e "[3 fo 6]================================\n`date`:正在改变文件归属,为上传到WEB服务器准备。" 1>&2
  51.         str=$changed

  52.         # 字符串变成类似数组的东西,下面的for可以一次打印一个出来
  53.         var=`echo $str | awk -F',' '{print $0}' | sed "s/,/ /g"`

  54.         # list为文件名和SVN标记码一次搞一个出来
  55.         for list in $var
  56.         do
  57.                 # 获取每次list字符串的长度
  58.                 filesneme_len=`expr length $list`
  59.                 # 这个if对长度小于1的文件名过滤掉>符号需要转义
  60.                 if [ "$filesneme_len" \> "1" ]
  61.                 then
  62.                         # 这里取得的是字符串的第一个/前后的字符串 分别为仓库名字和带路径文件名
  63.                         #echo 仓库:${list%%/*}
  64.                         #echo 文件:/${list#*/}
  65.                
  66.                         # 根据仓库名字给文件分派权限
  67.                         if [ "${list%%/*}" == "ec_qiuyi" ]
  68.                         then
  69.                                 #设定检出文件为用户组1
  70.                                 echo 设定检出文件为用户组1
  71.                                 echo 仓库:${list%%/*}
  72.                                 echo 文件:/${list#*/}
  73.                                 chown 1000:1100 $WEB1/${list#*/}
  74.                                 # 只同步修改的内容
  75.                                 rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/${list#*/}" "root@$WEBIP:$WEB1\_svn/${list#*/}" >> $LOG
  76.                         fi
  77.                        
  78.                         if [ "${list%%/*}" == "customer" ]
  79.                         then
  80.                                 #设定检出文件为用户组2
  81.                                 echo 设定检出文件为用户组2
  82.                                 echo 仓库:${list%%/*}
  83.                                 echo 文件:/${list#*/}
  84.                                 chown 1002:1100 $WEB2/${list#*/}
  85.                                 # 只同步修改的内容
  86.                                 rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/${list#*/}" "root@$WEBIP:$WEB2\_svn/${list#*/}" >> $LOG
  87.                         fi
  88.                 fi
  89.         done
  90.         echo -e "[4 fo 6]================================\n`date`:文件归属修改完成。" 1>&2


  91. ######################################################################################
  92. # 记录日志和上传文件 #################################################################
  93. ######################################################################################

  94.         echo ""     >> $LOG;echo `date` >> $LOG;echo "##############################" >> $LOG
  95. # 修改新检出文件的权限
  96. # chown -R 1000:1100 $WEB
  97. # chown -R 1002:1100 $WEB2
  98. #同步代码从SVN服务器到WEB服务器 通过RSYNC
  99. #$RSYNC -vaztpH  --timeout=90   --exclude-from=$SVN/exclude.list $WEB root@$WEBIP:$WEB/ >> $LOG

  100.         echo -e "[5 fo 6]================================\n`date`:正上传到WEB服务器,并检查文件完整。" 1>&2


  101.         # 同步完整内容 如目录删除文件删除之类..
  102.        
  103.         rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/" "root@$WEBIP:$WEB1\_svn/" >> $LOG
  104.         rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/" "root@$WEBIP:$WEB2\_svn/" >> $LOG


  105.         echo -e "[6 fo 6]================================\n`date`:代码已经发布到远端WEB。" 1>&2
  106.    
  107. fi
  108. # 利用钩子错误退出 输出过程信息
  109. exit 1
复制代码
完善后的另外二个版本
  1. #!/bin/sh

  2. ######################################################################################
  3. # 配置自动发布到WEB服务器 编辑 post-commit 文件 ######################################
  4. ######################################################################################
  5. # -------------------------------------------------------------------------------
  6. # Filename:    post-commit
  7. # Description: WEB server with synchronization code by SVN
  8. # -------------------------------------------------------------------------------
  9. #Version 1.0
  10. #当用戶把代碼提交完成时,把代碼中的最新更改同步到 WEB服務器,同時注意不包括刪除操作。


  11. echo -e "[1 fo 6]================================\n`date`:这次更新将发布到测试和WEB。" 1>&2

  12. # 库的路径
  13. REPOS="$1"

  14. # 新提交的版本号
  15. REV="$2"

  16. changed=$(svnlook changed -r $REV $REPOS)
  17. echo $changed > /home/svn/hooks/last_changed
  18. echo $REPOS >> /home/svn/hooks/last_changed
  19. echo $REV >> /home/svn/hooks/last_changed


  20. #Set variable
  21. SVN=/home/svn
  22. SVNUSER=本地管理员ID
  23. SVNPASD=本地管理员密码

  24. mkdir -p $SVN

  25. # 测试服务器路径
  26. WEB1=/home/ftp/e/ecshop_2013/wwwroot
  27. WEB2=/home/ftp/c/customer/wwwroot
  28. WEB3=/home/ftp/u/ugg_ecshop_2013/wwwroot
  29. WEB4=/home/ftp/l/luck_ecshop_2013/wwwroot

  30. # 同步标记
  31. WEB1_SYNC=NO
  32. WEB2_SYNC=NO
  33. WEB3_SYNC=NO
  34. WEB4_SYNC=NO

  35. # 待同步操作数
  36. WEB1_SYNC_NUM=0
  37. WEB2_SYNC_NUM=0
  38. WEB3_SYNC_NUM=0
  39. WEB4_SYNC_NUM=0


  40. # 同步方式
  41. RSYNC=rsync




  42. # 同步日志
  43. LOG=/home/svn/post-commit.log
  44. echo "================================================" > $LOG
  45. echo `date`:这是最近一次SVN提交的信息。>> $LOG
  46. echo "================================================" >> $LOG


  47. mkdir -p $WEB1
  48. mkdir -p $WEB2
  49. mkdir -p $WEB3
  50. mkdir -p $WEB4

  51. # 第一次需要检出
  52. # svn co svn://127.0.0.1/ec_ugg ./

  53. # 远端服务器IP
  54. WEBIP_QY="192.168.1.1"
  55. WEBIP_UG="192.168.1.2"
  56. WEBIP_LU="192.168.1.3"



  57. # 避免乱码
  58. export LANG=en_US.UTF-8

  59. #更新文件到本地文件夹
  60. echo "================================================" >> $LOG
  61. echo "更新文件到本地文件夹" >> $LOG
  62. svn update $WEB1  --username $SVNUSER --password $SVNPASD >> $LOG
  63. svn update $WEB2  --username $SVNUSER --password $SVNPASD >> $LOG
  64. svn update $WEB3  --username $SVNUSER --password $SVNPASD >> $LOG
  65. svn update $WEB4  --username $SVNUSER --password $SVNPASD >> $LOG
  66. echo "================================================" >> $LOG

  67. # 必须要检出成功才开始执行下面的 #####################################################
  68. if [ $? != 0 ] ; then
  69.         echo -e "项目检出失败,同步终止!" 1>&2
  70.         exit $?
  71. fi
  72. echo -e "[2 fo 6]================================\n`date`:文件顺利检出到测试项目。" 1>&2

  73. ######################################################################################
  74. # 这里是解析本次操作的文件名 用于提高修改权限的速度 ##################################
  75. ######################################################################################
  76. echo -e "[3 fo 6]================================\n`date`:正在改变文件归属,为上传到WEB服务器准备。" 1>&2
  77. str=$changed

  78. # 字符串变成类似数组的东西,下面的for可以一次打印一个出来
  79. var=`echo $str | awk -F',' '{print $0}' | sed "s/,/ /g"`

  80. # list为文件名和SVN标记码一次搞一个出来
  81. for list in $var
  82. do
  83.     # 获取每次list字符串的长度
  84.     filesneme_len=`expr length $list`
  85.     # 这个if对长度小于1的文件名过滤掉>符号需要转义
  86.     if [ "$filesneme_len" \> "1" ]
  87.     then
  88.         # 这里取得的是字符串的第一个/前后的字符串 分别为仓库名字和带路径文件名
  89.         #echo 仓库:${list%%/*}
  90.         #echo 文件:/${list#*/}
  91.    
  92.         # 根据仓库名字给文件分派权限
  93.         
  94.         # 项目0
  95.         if [ "${list%%/*}" == "ec_qiuyi" ]
  96.         then
  97.             # 设定同步标记
  98.             WEB1_SYNC="YES"
  99.             # 累加标记
  100.             WEB1_SYNC_NUM=$[$WEB1_SYNC_NUM+1]
  101.             #设定检出文件为用户组1
  102.             echo 设定检出文件为用户组1
  103.             echo 仓库:${list%%/*}
  104.             echo 文件:/${list#*/}
  105.             chown 1000:1100 $WEB1/${list#*/}
  106.             # 只同步修改的内容
  107.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/${list#*/}" "root@$WEBIP_QY:$WEB1\_svn/${list#*/}" >> $LOG
  108.             # 同步完整内容 如目录删除文件删除之类..
  109.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/" "root@$WEBIP_QY:$WEB1\_svn/" >> $LOG # 项目0
  110.         fi
  111.         
  112.         # 项目1
  113.         if [ "${list%%/*}" == "customer" ]
  114.         then
  115.             # 设定同步标记
  116.             WEB2_SYNC="YES"
  117.             # 累加标记
  118.             WEB2_SYNC_NUM=$[$WEB1_SYNC_NUM+1]
  119.             #设定检出文件为用户组2
  120.             echo 设定检出文件为用户组2
  121.             echo 仓库:${list%%/*}
  122.             echo 文件:/${list#*/}
  123.             chown 1002:1100 $WEB2/${list#*/}
  124.             # 只同步修改的内容
  125.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/${list#*/}" "root@$WEBIP_QY:$WEB2\_svn/${list#*/}" >> $LOG
  126.             # 同步完整内容 如目录删除文件删除之类..
  127.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/" "root@$WEBIP_QY:$WEB2\_svn/" >> $LOG # 项目1
  128.         fi
  129.         
  130.         # 项目2
  131.         if [ "${list%%/*}" == "ec_ugg" ]
  132.         then       
  133.             # 设定同步标记
  134.             WEB3_SYNC="YES"
  135.             # 累加标记
  136.             WEB3_SYNC_NUM=$[$WEB1_SYNC_NUM+1]
  137.             #设定检出文件为用户组3
  138.             echo 设定检出文件为用户组3
  139.             echo 仓库:${list%%/*}
  140.             echo 文件:/${list#*/}
  141.             chown 1000:1100 $WEB3/${list#*/}
  142.             # 只同步修改的内容
  143.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB3/${list#*/}" "root@$WEBIP_UG:$WEB3\_svn/${list#*/}" >> $LOG
  144.             # 同步完整内容 如目录删除文件删除之类..
  145.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB3/" "root@$WEBIP_UG:$WEB3\_svn/" >> $LOG # 项目2

  146.         fi
  147.         
  148.         # 项目3
  149.         if [ "${list%%/*}" == "ec_luck" ]
  150.         then
  151.             # 设定同步标记
  152.             WEB4_SYNC="YES"
  153.             # 累加标记
  154.             WEB4_SYNC_NUM=$[$WEB1_SYNC_NUM+1]
  155.             #设定检出文件为用户组4
  156.             echo 设定检出文件为用户组4
  157.             echo 仓库:${list%%/*}
  158.             echo 文件:/${list#*/}
  159.             chown 1000:1100 $WEB4/${list#*/}
  160.             # 只同步修改的内容
  161.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB4/${list#*/}" "root@$WEBIP_LU:$WEB1\_svn/${list#*/}" >> $LOG
  162.             # 同步完整内容 如目录删除文件删除之类..
  163.             #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB4/" "root@$WEBIP_LU:$WEB1\_svn/" >> $LOG # 项目3
  164.         fi               


  165.     fi
  166. done
  167. echo -e "[4 fo 6]================================\n`date`:文件归属修改完成。" 1>&2


  168. ######################################################################################
  169. # 记录日志和上传文件 #################################################################
  170. ######################################################################################

  171. echo ""     >> $LOG;echo `date` >> $LOG;echo "##############################" >> $LOG
  172. # 修改新检出文件的权限
  173. # chown -R 1000:1100 $WEB
  174. # chown -R 1002:1100 $WEB2
  175. #同步代码从SVN服务器到WEB服务器 通过RSYNC
  176. #$RSYNC -vaztpH  --timeout=90   --exclude-from=$SVN/exclude.list $WEB root@$WEBIP:$WEB/ >> $LOG

  177. echo -e "[5 fo 6]================================\n`date`:正上传到WEB服务器,并检查文件完整。" 1>&2


  178. # 同步完整内容 如目录删除文件删除之类..
  179. echo "================================================" >> $LOG
  180. echo "同步完整内容 如目录删除文件删除之类.." >> $LOG

  181. if [ "$WEB1_SYNC" == "YES" ]
  182. then
  183.     echo -e "正同步($WEB1_SYNC_NUM个操作记录)到 球衣服务器" 1>&2
  184.     time rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/" "root@$WEBIP_QY:$WEB1\_svn/" >> $LOG # 球衣
  185. fi

  186. if [ "$WEB2_SYNC" == "YES" ]
  187. then       
  188.     echo -e "正同步($WEB2_SYNC_NUM个操作记录)到 客服系统服务器" 1>&2
  189.     time rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/" "root@$WEBIP_QY:$WEB2\_svn/" >> $LOG # 客服系统
  190. fi

  191. if [ "$WEB3_SYNC" == "YES" ]
  192. then
  193.     echo -e "正同步($WEB3_SYNC_NUM个操作记录)到 UGG孩子服务器" 1>&2
  194.     time rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB3/" "root@$WEBIP_UG:$WEB3\_svn/" >> $LOG # UGG鞋子
  195. fi

  196. if [ "$WEB4_SYNC" == "YES" ]
  197. then
  198.     echo -e "正同步($WEB4_SYNC_NUM个操作记录)到 吉祥符服务器" 1>&2
  199.     time rsync -vzurtopg '-e ssh -p 10079' --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB4/" "root@$WEBIP_LU:$WEB1\_svn/" >> $LOG # 吉祥符
  200. fi

  201. echo -e "[6 fo 6]================================\n`date`:代码已经发布到远端WEB。" 1>&2
  202. echo "================================================" >> $LOG


  203. # 利用钩子错误退出 输出过程信息
  204. exit 1
复制代码
一个强制要求程序员为自己的上传注释的钩子(pre-commit)
  1. REPOS="$1"
  2. TXN="$2"

  3. # Make sure that the log message contains some text.
  4. SVNLOOK=/usr/bin/svnlook
  5. # $SVNLOOK log -t "$TXN" "$REPOS" | \
  6. # grep "[a-zA-Z0-9]" > /dev/null || exit 1


  7. LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
  8. if [ "$LOGMSG" -lt 8 ];#要求注释不能少于8个字符,您可自定义
  9. then
  10. echo -e "\n======================================================" 1>&2
  11. echo -e "\n请在Commit(提交)前为您的补丁添加必要的注释。\n本次提交被忽略。" 1>&2
  12. echo -e "\n======================================================" 1>&2
  13. exit 1
  14. fi

  15. # Check that the author of this commit has the rights to perform
  16. # the commit on the files and directories being modified.
  17. # commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1

  18. # All checks passed, so allow the commit.
  19. # exit 0
复制代码
附件:exclude.list 文件示例
  1. vi $SVN/exclude.list
  2. .svn/
  3. .DS_Store
  4. images/
复制代码
CentOS 搭建SVN服务器(附自动部署到远程WEB)
http://blog.baiduola.com/826/
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部