CENTOS 搭建SVN服务器(附自动部署到远程WEB)
CENTOS 搭建SVN服务器(附自动部署到远程WEB)
安装subversion服务端
01 | # 安装 |
02 | yum install -y subversion |
03 |
04 | # 测试是否安装成功 如果显示了版本信息则表示安装成功 |
05 | svnserve --version; sleep 5s |
06 |
07 | # svn配置建立svn版本库目录可建多个: |
08 | PATHSSS= "/home/svn" |
09 | echo SVN仓库将创建在:$PATHSSS; sleep 5s |
10 |
11 | # 新建一个版本库目录 |
12 | mkdir -p $PATHSSS |
13 | cd $PATHSSS |
14 | # 建立svn版本库: |
15 | svnadmin create $PATHSSS |
16 |
17 | # 先设置passwd |
18 | cat >$PATHSSS /conf/passwd <<ANGIE.K |
19 | [ users ] |
20 | jianglinzhi = jianglinzhi |
21 | root1 = root |
22 | ANGIE.K |
23 |
24 | # 再设置权限authz |
25 | cat >$PATHSSS /conf/authz <<ANGIE.K |
26 | [ groups ] #用户组 |
27 | admin = jianglinzhi,root1 |
28 | coder = coders1,coders2,coders3 |
29 | ui_and_ue = ui1,ui2,ui3 |
30 | [/] #/仓库权限 |
31 | @admin = rw |
32 | @coder = rw |
33 | @ui_and_ue = rw |
34 | ANGIE.K |
35 |
36 | # 最后设定svnserve.conf |
37 | cat >$PATHSSS /conf/svnserve .conf<<ANGIE.K |
38 | [general] |
39 | # 使非授权用户无法访问 |
40 | anon-access = none |
41 | # 使授权用户有写权限 |
42 | auth-access = write |
43 | # 用户密码文件 |
44 | password-db = passwd |
45 | # 访问控制文件 |
46 | authz-db = authz |
47 | # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。 |
48 | realm = 姜林志的第一个SNV服务器 欢迎你. |
49 | ANGIE.K |
50 |
51 | # 启动 默认端口 3690 |
52 | killall svnserve |
53 | svnserve -d -r $PATHSSS |
54 |
55 | # 加入开机启动 |
56 | echo svnserve -d -r $PATHSSS >> /etc/rc . local |
导入工程和第一次检出
导入到仓库
cd 进入工程目录上一级
执行:
01 | #导入前先处理下WIN不支持的文件名 如 : * ? " < > | |
02 | # find ./ -name "*\?*" #查找 |
03 | # find ./ -name "*\?*" -print -exec rm -rf {} \; #删除 |
04 | # find ./ -name "*\:*" -print -exec rm -rf {} \; #删除 |
05 | # find ./ -name "*\"*" -print -exec rm -rf {} \; #删除 |
06 | # find ./ -name "*\<*" -print -exec rm -rf {} \; #删除 |
07 | # find ./ -name "*\>*" -print -exec rm -rf {} \; #删除 |
08 | # find ./ -name "*\|*" -print -exec rm -rf {} \; #删除 |
09 |
10 | 提示:如果你设置了pre-commit钩子(比如:强制要求注释,请先解除这个钩子,以免导入失败) |
11 |
12 | svn import 待导入工程路径(目录) svn: //127 .0.0.1/定义工程在仓库的目录名字 -m "对于本次操作的注释" |
13 | 或者 切换到待导入目录 |
14 | svn import ./ svn: //127 .0.0.1/定义工程在仓库的目录名字 -m "对于本次操作的注释" |
将在仓库中新建工程目录和文件
检出到工程
cd 进入工程目录 执行即可
1 | svn co svn: //127 .0.0.1 ./ |
判定程序员是否为补丁添加注释(per-commit)
这个钩子脚本,在每次commit之后会执行,格式是SHELL脚本,是从网上收集来的测试可用
这个文件的详细路径请看下面的cd命令
01 | cd $PATHSSS /hooks |
02 | cp per-commit.tmpl per-commit |
03 | chmod 755 per-commit |
04 | vi $PATHSSS /hooks/per-commit |
05 | ############################################### |
06 | #!/bin/sh |
07 | # PRE-COMMIT HOOK |
08 | # .... 中间省略 |
10 | REPOS= "$1" |
11 | TXN= "$2" |
12 | SVNLOOK= /usr/bin/svnlook |
13 |
14 | LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` |
15 | if [ "$LOGMSG" -lt 8 ]; #要求注释不能少于8个字符,您可自定义 |
16 | then |
17 | echo -e "\n======================================================" 1>&2 |
18 | echo -e "\n请在Commit(提交)前为您的补丁添加必要的注释。\n本次提交被忽略。" 1>&2 |
19 | echo -e "\n======================================================" 1>&2 |
20 | exit 1 |
21 | fi |
自动同步到WEB服务器(post-commit)
这个钩子脚本,在每次commit之后会执行,格式是SHELL脚本,是从网上收集来的测试可用
这个文件的详细路径请看下面的cd命令
01 | # 配置自动发布到WEB服务器 编辑 post-commit 文件 |
02 | cd $PATHSSS /hooks |
03 | cp post-commit.tmpl post-commit |
04 | chmod 755 post-commit |
05 | vi $PATHSSS /hooks/post-commit |
06 | ############################################### |
07 | #!/bin/sh |
08 | # ------------------------------------------------------------------------------- |
09 | # Filename: post-commit |
10 | # Description: WEB server with synchronization code by SVN |
11 | # ------------------------------------------------------------------------------- |
12 | #Version 1.0 |
13 | #当用戶把代碼提交完成时,把代碼中的最新更改同步到 WEB服務器,同時注意不包括刪除操作。 |
14 |
15 | #Set variable |
16 | SVN= /home/svn |
17 | SVNUSER=root1 |
18 | SVNPASD=root |
19 | WEB= /home/ftp/svn #待上传到WEB服务器的文件存放路径 第一次 需要先到该目录检出一次svn co svn://127.0.0.1 ./ |
20 | |
21 | WEBIP= "192.168.0.23" |
22 | RSYNC= rsync |
23 | LOG= /home/svn/post-commit .log |
24 | export LANG=en_US.UTF-8 |
25 |
26 | mkdir -p $SVN |
27 | mkdir -p $WEB |
28 |
29 | #更新文件到本地文件夹 |
30 | svn update $WEB --username $SVNUSER --password $SVNPASD |
31 | #如果前面的代码成功完成,会继续执行下面的代码 |
32 | if [ $? == 0 ] |
33 | then |
34 | echo "" >> $LOG |
35 | echo ` date ` >> $LOG |
36 | echo "##############################" >> $LOG |
37 | chown -R nobody:nobody $WEB |
38 | #同步代码从SVN服务器到WEB服务器 通过RSYNC |
39 | $RSYNC -vaztpH --timeout=90 --exclude-from=$SVN /exclude .list $WEB root@$WEBIP:$WEB/ >> $LOG |
40 | fi |
完善后的另外一个版本
001 | #!/bin/sh |
002 |
003 | # POST-COMMIT HOOK |
004 | # ... 省略 |
006 |
007 | # mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf |
008 | echo -e "[1 fo 6]================================\n`date`:这次更新将发布到测试和WEB。" 1>&2 |
009 |
010 | # 库的路径 |
011 | REPOS= "$1" |
012 |
013 | # 新提交的版本号 |
014 | REV= "$2" |
015 |
016 | changed=$(svnlook changed -r $REV $REPOS) |
017 | echo $changed > /home/svn/hooks/last_changed |
018 | echo $REPOS >> /home/svn/hooks/last_changed |
019 | echo $REV >> /home/svn/hooks/last_changed |
020 |
021 |
022 | ###################################################################################### |
023 | # 配置自动发布到WEB服务器 编辑 post-commit 文件 ###################################### |
024 | ###################################################################################### |
025 | # ------------------------------------------------------------------------------- |
026 | # Filename: post-commit |
027 | # Description: WEB server with synchronization code by SVN |
028 | # ------------------------------------------------------------------------------- |
029 | #Version 1.1 |
030 | #当用戶把代碼提交完成时,把代碼中的最新更改同步到 WEB服務器,同時注意不包括刪除操作。 |
031 |
032 | #Set variable |
033 | SVN= /home/svn |
034 | SVNUSER=root1 |
035 | SVNPASD=root |
036 |
037 | # 测试服务器路径 |
038 | WEB1= /home/ftp/e/ecshop_2013/wwwroot |
039 | WEB2= /home/ftp/c/customer/wwwroot |
040 |
041 | # 远端服务器IP |
042 | WEBIP= "192.168.1.1" |
043 |
044 | # 同步方式 |
045 | RSYNC= rsync |
046 |
047 | # 同步日志 |
048 | LOG= /home/svn/post-commit .log |
049 |
050 | # 避免乱码 |
051 | export LANG=en_US.UTF-8 |
052 |
053 | mkdir -p $SVN |
054 |
055 | #更新文件到本地文件夹 |
056 | svn update $WEB1 --username $SVNUSER --password $SVNPASD |
057 | svn update $WEB2 --username $SVNUSER --password $SVNPASD |
058 |
059 |
060 |
061 | # 必须要检出成功才开始执行下面的 ##################################################### |
062 | if [ $? == 0 ] |
063 | then |
064 | echo -e "[2 fo 6]================================\n`date`:文件顺利检出到测试项目。" 1>&2 |
065 |
066 |
067 | ###################################################################################### |
068 | # 这里是解析本次操作的文件名 用于提高修改权限的速度 ################################## |
069 | ###################################################################################### |
070 | echo -e "[3 fo 6]================================\n`date`:正在改变文件归属,为上传到WEB服务器准备。" 1>&2 |
071 | str=$changed |
072 |
073 | # 字符串变成类似数组的东西,下面的for可以一次打印一个出来 |
074 | var=` echo $str | awk -F ',' '{print $0}' | sed "s/,/ /g" ` |
075 |
076 | # list为文件名和SVN标记码一次搞一个出来 |
077 | for list in $var |
078 | do |
079 | # 获取每次list字符串的长度 |
080 | filesneme_len=` expr length $list` |
081 | # 这个if对长度小于1的文件名过滤掉>符号需要转义 |
082 | if [ "$filesneme_len" \> "1" ] |
083 | then |
084 | # 这里取得的是字符串的第一个/前后的字符串 分别为仓库名字和带路径文件名 |
085 | #echo 仓库:${list%%/*} |
086 | #echo 文件:/${list#*/} |
087 | |
088 | # 根据仓库名字给文件分派权限 |
089 | if [ "${list%%/*}" == "ec_qiuyi" ] |
090 | then |
091 | #设定检出文件为用户组1 |
092 | echo 设定检出文件为用户组1 |
093 | echo 仓库:${list%%/*} |
094 | echo 文件:/${list #*/} |
095 | chown 1000:1100 $WEB1/${list #*/} |
096 | # 只同步修改的内容 |
097 | rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB1/${list#*/}" "root@$WEBIP:$WEB1\_svn/${list#*/}" >> $LOG |
098 | fi |
099 | |
100 | if [ "${list%%/*}" == "customer" ] |
101 | then |
102 | #设定检出文件为用户组2 |
103 | echo 设定检出文件为用户组2 |
104 | echo 仓库:${list%%/*} |
105 | echo 文件:/${list #*/} |
106 | chown 1002:1100 $WEB2/${list #*/} |
107 | # 只同步修改的内容 |
108 | rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB2/${list#*/}" "root@$WEBIP:$WEB2\_svn/${list#*/}" >> $LOG |
109 | fi |
110 | fi |
111 | done |
112 | echo -e "[4 fo 6]================================\n`date`:文件归属修改完成。" 1>&2 |
113 |
114 |
115 | ###################################################################################### |
116 | # 记录日志和上传文件 ################################################################# |
117 | ###################################################################################### |
118 |
119 | echo "" >> $LOG; echo ` date ` >> $LOG; echo "##############################" >> $LOG |
120 | # 修改新检出文件的权限 |
121 | # chown -R 1000:1100 $WEB |
122 | # chown -R 1002:1100 $WEB2 |
123 | #同步代码从SVN服务器到WEB服务器 通过RSYNC |
124 | #$RSYNC -vaztpH --timeout=90 --exclude-from=$SVN/exclude.list $WEB root@$WEBIP:$WEB/ >> $LOG |
125 |
126 | echo -e "[5 fo 6]================================\n`date`:正上传到WEB服务器,并检查文件完整。" 1>&2 |
127 |
128 |
129 | # 同步完整内容 如目录删除文件删除之类.. |
130 | |
131 | rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB1/" "root@$WEBIP:$WEB1\_svn/" >> $LOG |
132 | rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB2/" "root@$WEBIP:$WEB2\_svn/" >> $LOG |
133 |
134 |
135 | echo -e "[6 fo 6]================================\n`date`:代码已经发布到远端WEB。" 1>&2 |
136 | |
137 | fi |
138 | # 利用钩子错误退出 输出过程信息 |
139 | exit 1 |
完善后的另外二个版本
001 | #!/bin/sh |
002 |
003 | ###################################################################################### |
004 | # 配置自动发布到WEB服务器 编辑 post-commit 文件 ###################################### |
005 | ###################################################################################### |
006 | # ------------------------------------------------------------------------------- |
007 | # Filename: post-commit |
008 | # Description: WEB server with synchronization code by SVN |
009 | # ------------------------------------------------------------------------------- |
010 | #Version 1.0 |
011 | #当用戶把代碼提交完成时,把代碼中的最新更改同步到 WEB服務器,同時注意不包括刪除操作。 |
012 |
013 |
014 | echo -e "[1 fo 6]================================\n`date`:这次更新将发布到测试和WEB。" 1>&2 |
015 |
016 | # 库的路径 |
017 | REPOS= "$1" |
018 |
019 | # 新提交的版本号 |
020 | REV= "$2" |
021 |
022 | changed=$(svnlook changed -r $REV $REPOS) |
023 | echo $changed > /home/svn/hooks/last_changed |
024 | echo $REPOS >> /home/svn/hooks/last_changed |
025 | echo $REV >> /home/svn/hooks/last_changed |
026 |
027 |
028 | #Set variable |
029 | SVN= /home/svn |
030 | SVNUSER=本地管理员ID |
031 | SVNPASD=本地管理员密码 |
032 |
033 | mkdir -p $SVN |
034 |
035 | # 测试服务器路径 |
036 | WEB1= /home/ftp/e/ecshop_2013/wwwroot |
037 | WEB2= /home/ftp/c/customer/wwwroot |
038 | WEB3= /home/ftp/u/ugg_ecshop_2013/wwwroot |
039 | WEB4= /home/ftp/l/luck_ecshop_2013/wwwroot |
040 |
041 | # 同步标记 |
042 | WEB1_SYNC=NO |
043 | WEB2_SYNC=NO |
044 | WEB3_SYNC=NO |
045 | WEB4_SYNC=NO |
046 |
047 | # 待同步操作数 |
048 | WEB1_SYNC_NUM=0 |
049 | WEB2_SYNC_NUM=0 |
050 | WEB3_SYNC_NUM=0 |
051 | WEB4_SYNC_NUM=0 |
052 |
053 |
054 | # 同步方式 |
055 | RSYNC= rsync |
056 |
057 |
058 |
059 |
060 | # 同步日志 |
061 | LOG= /home/svn/post-commit .log |
062 | echo "================================================" > $LOG |
063 | echo ` date `:这是最近一次SVN提交的信息。>> $LOG |
064 | echo "================================================" >> $LOG |
065 |
066 |
067 | mkdir -p $WEB1 |
068 | mkdir -p $WEB2 |
069 | mkdir -p $WEB3 |
070 | mkdir -p $WEB4 |
071 |
072 | # 第一次需要检出 |
073 | # svn co svn://127.0.0.1/ec_ugg ./ |
074 |
075 | # 远端服务器IP |
076 | WEBIP_QY= "192.168.1.1" |
077 | WEBIP_UG= "192.168.1.2" |
078 | WEBIP_LU= "192.168.1.3" |
079 |
080 |
081 |
082 | # 避免乱码 |
083 | export LANG=en_US.UTF-8 |
084 |
085 | #更新文件到本地文件夹 |
086 | echo "================================================" >> $LOG |
087 | echo "更新文件到本地文件夹" >> $LOG |
088 | svn update $WEB1 --username $SVNUSER --password $SVNPASD >> $LOG |
089 | svn update $WEB2 --username $SVNUSER --password $SVNPASD >> $LOG |
090 | svn update $WEB3 --username $SVNUSER --password $SVNPASD >> $LOG |
091 | svn update $WEB4 --username $SVNUSER --password $SVNPASD >> $LOG |
092 | echo "================================================" >> $LOG |
093 |
094 | # 必须要检出成功才开始执行下面的 ##################################################### |
095 | if [ $? != 0 ] ; then |
096 | echo -e "项目检出失败,同步终止!" 1>&2 |
097 | exit $? |
098 | fi |
099 | echo -e "[2 fo 6]================================\n`date`:文件顺利检出到测试项目。" 1>&2 |
100 |
101 | ###################################################################################### |
102 | # 这里是解析本次操作的文件名 用于提高修改权限的速度 ################################## |
103 | ###################################################################################### |
104 | echo -e "[3 fo 6]================================\n`date`:正在改变文件归属,为上传到WEB服务器准备。" 1>&2 |
105 | str=$changed |
106 |
107 | # 字符串变成类似数组的东西,下面的for可以一次打印一个出来 |
108 | var=` echo $str | awk -F ',' '{print $0}' | sed "s/,/ /g" ` |
109 |
110 | # list为文件名和SVN标记码一次搞一个出来 |
111 | for list in $var |
112 | do |
113 | # 获取每次list字符串的长度 |
114 | filesneme_len=` expr length $list` |
115 | # 这个if对长度小于1的文件名过滤掉>符号需要转义 |
116 | if [ "$filesneme_len" \> "1" ] |
117 | then |
118 | # 这里取得的是字符串的第一个/前后的字符串 分别为仓库名字和带路径文件名 |
119 | #echo 仓库:${list%%/*} |
120 | #echo 文件:/${list#*/} |
121 | |
122 | # 根据仓库名字给文件分派权限 |
123 | |
124 | # 项目0 |
125 | if [ "${list%%/*}" == "ec_qiuyi" ] |
126 | then |
127 | # 设定同步标记 |
128 | WEB1_SYNC= "YES" |
129 | # 累加标记 |
130 | WEB1_SYNC_NUM=$[$WEB1_SYNC_NUM+1] |
131 | #设定检出文件为用户组1 |
132 | echo 设定检出文件为用户组1 |
133 | echo 仓库:${list%%/*} |
134 | echo 文件:/${list #*/} |
135 | chown 1000:1100 $WEB1/${list #*/} |
136 | # 只同步修改的内容 |
137 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/${list#*/}" "root@$WEBIP_QY:$WEB1\_svn/${list#*/}" >> $LOG |
138 | # 同步完整内容 如目录删除文件删除之类.. |
139 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB1/" "root@$WEBIP_QY:$WEB1\_svn/" >> $LOG # 项目0 |
140 | fi |
141 | |
142 | # 项目1 |
143 | if [ "${list%%/*}" == "customer" ] |
144 | then |
145 | # 设定同步标记 |
146 | WEB2_SYNC= "YES" |
147 | # 累加标记 |
148 | WEB2_SYNC_NUM=$[$WEB1_SYNC_NUM+1] |
149 | #设定检出文件为用户组2 |
150 | echo 设定检出文件为用户组2 |
151 | echo 仓库:${list%%/*} |
152 | echo 文件:/${list #*/} |
153 | chown 1002:1100 $WEB2/${list #*/} |
154 | # 只同步修改的内容 |
155 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/${list#*/}" "root@$WEBIP_QY:$WEB2\_svn/${list#*/}" >> $LOG |
156 | # 同步完整内容 如目录删除文件删除之类.. |
157 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB2/" "root@$WEBIP_QY:$WEB2\_svn/" >> $LOG # 项目1 |
158 | fi |
159 | |
160 | # 项目2 |
161 | if [ "${list%%/*}" == "ec_ugg" ] |
162 | then |
163 | # 设定同步标记 |
164 | WEB3_SYNC= "YES" |
165 | # 累加标记 |
166 | WEB3_SYNC_NUM=$[$WEB1_SYNC_NUM+1] |
167 | #设定检出文件为用户组3 |
168 | echo 设定检出文件为用户组3 |
169 | echo 仓库:${list%%/*} |
170 | echo 文件:/${list #*/} |
171 | chown 1000:1100 $WEB3/${list #*/} |
172 | # 只同步修改的内容 |
173 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB3/${list#*/}" "root@$WEBIP_UG:$WEB3\_svn/${list#*/}" >> $LOG |
174 | # 同步完整内容 如目录删除文件删除之类.. |
175 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB3/" "root@$WEBIP_UG:$WEB3\_svn/" >> $LOG # 项目2 |
176 |
177 | fi |
178 | |
179 | # 项目3 |
180 | if [ "${list%%/*}" == "ec_luck" ] |
181 | then |
182 | # 设定同步标记 |
183 | WEB4_SYNC= "YES" |
184 | # 累加标记 |
185 | WEB4_SYNC_NUM=$[$WEB1_SYNC_NUM+1] |
186 | #设定检出文件为用户组4 |
187 | echo 设定检出文件为用户组4 |
188 | echo 仓库:${list%%/*} |
189 | echo 文件:/${list #*/} |
190 | chown 1000:1100 $WEB4/${list #*/} |
191 | # 只同步修改的内容 |
192 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB4/${list#*/}" "root@$WEBIP_LU:$WEB1\_svn/${list#*/}" >> $LOG |
193 | # 同步完整内容 如目录删除文件删除之类.. |
194 | #rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN/exclude.list "$WEB4/" "root@$WEBIP_LU:$WEB1\_svn/" >> $LOG # 项目3 |
195 | fi |
196 |
197 |
198 | fi |
199 | done |
200 | echo -e "[4 fo 6]================================\n`date`:文件归属修改完成。" 1>&2 |
201 |
202 |
203 | ###################################################################################### |
204 | # 记录日志和上传文件 ################################################################# |
205 | ###################################################################################### |
206 |
207 | echo "" >> $LOG; echo ` date ` >> $LOG; echo "##############################" >> $LOG |
208 | # 修改新检出文件的权限 |
209 | # chown -R 1000:1100 $WEB |
210 | # chown -R 1002:1100 $WEB2 |
211 | #同步代码从SVN服务器到WEB服务器 通过RSYNC |
212 | #$RSYNC -vaztpH --timeout=90 --exclude-from=$SVN/exclude.list $WEB root@$WEBIP:$WEB/ >> $LOG |
213 |
214 | echo -e "[5 fo 6]================================\n`date`:正上传到WEB服务器,并检查文件完整。" 1>&2 |
215 |
216 |
217 | # 同步完整内容 如目录删除文件删除之类.. |
218 | echo "================================================" >> $LOG |
219 | echo "同步完整内容 如目录删除文件删除之类.." >> $LOG |
220 |
221 | if [ "$WEB1_SYNC" == "YES" ] |
222 | then |
223 | echo -e "正同步($WEB1_SYNC_NUM个操作记录)到 球衣服务器" 1>&2 |
224 | time rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB1/" "root@$WEBIP_QY:$WEB1\_svn/" >> $LOG # 球衣 |
225 | fi |
226 |
227 | if [ "$WEB2_SYNC" == "YES" ] |
228 | then |
229 | echo -e "正同步($WEB2_SYNC_NUM个操作记录)到 客服系统服务器" 1>&2 |
230 | time rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB2/" "root@$WEBIP_QY:$WEB2\_svn/" >> $LOG # 客服系统 |
231 | fi |
232 |
233 | if [ "$WEB3_SYNC" == "YES" ] |
234 | then |
235 | echo -e "正同步($WEB3_SYNC_NUM个操作记录)到 UGG孩子服务器" 1>&2 |
236 | time rsync -vzurtopg --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB3/" "root@$WEBIP_UG:$WEB3\_svn/" >> $LOG # UGG鞋子 |
237 | fi |
238 |
239 | if [ "$WEB4_SYNC" == "YES" ] |
240 | then |
241 | echo -e "正同步($WEB4_SYNC_NUM个操作记录)到 吉祥符服务器" 1>&2 |
242 | time rsync -vzurtopg '-e ssh -p 10079' --delete --timeout=60 --exclude-from=$SVN /exclude .list "$WEB4/" "root@$WEBIP_LU:$WEB1\_svn/" >> $LOG # 吉祥符 |
243 | fi |
244 |
245 | echo -e "[6 fo 6]================================\n`date`:代码已经发布到远端WEB。" 1>&2 |
246 | echo "================================================" >> $LOG |
247 |
248 |
249 | # 利用钩子错误退出 输出过程信息 |
250 | exit 1 |
一个强制要求程序员为自己的上传注释的钩子(pre-commit)
01 | REPOS= "$1" |
02 | TXN= "$2" |
03 |
04 | # Make sure that the log message contains some text. |
05 | SVNLOOK= /usr/bin/svnlook |
06 | # $SVNLOOK log -t "$TXN" "$REPOS" | \ |
07 | # grep "[a-zA-Z0-9]" > /dev/null || exit 1 |
08 |
09 |
10 | LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` |
11 | if [ "$LOGMSG" -lt 8 ]; #要求注释不能少于8个字符,您可自定义 |
12 | then |
13 | echo -e "\n======================================================" 1>&2 |
14 | echo -e "\n请在Commit(提交)前为您的补丁添加必要的注释。\n本次提交被忽略。" 1>&2 |
15 | echo -e "\n======================================================" 1>&2 |
16 | exit 1 |
17 | fi |
18 |
19 | # Check that the author of this commit has the rights to perform |
20 | # the commit on the files and directories being modified. |
21 | # commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 |
22 |
23 | # All checks passed, so allow the commit. |
24 | # exit 0 |
附件:
exclude.list 文件示例
1 | vi $SVN /exclude .list |
2 | .svn/ |
3 | .DS_Store |
4 | images/ |
目录 返回
首页