SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1774|回复: 1

[原创] 远程迁移SVN库同步数据

[复制链接]
发表于 2017-10-26 18:09:34 | 显示全部楼层 |阅读模式
本帖最后由 yjg021 于 2017-10-31 10:04 编辑 : Z$ D  r! t; n" g' d% }0 k* T

* l  `8 }' G! l% F8 ~异地远程迁移同步SVN库,操作模式大概如下图所示。
5 l% J; e# a3 c$ V, e1 G9 i/ ^. I% p  D

- l& ~; a" c# |) {7 P' K$ c
" A% O3 W9 U; s# K; A 按如下 shell 脚本执行顺序一次操作即可。4 `8 R% ?& J. N+ A" m
4 G# Z- M& i+ \* K4 x
1、$ cat svnlist.xml
, b* M2 g  T+ |7 l! Y
& o5 |) V& o# a7 S# A- G, f( GAndroid7.1.1_SHHAI
+ e1 q* C( T* w1 |. i$ xAndroid7.1.1_BJMO* {+ m: K) D7 x# V; `0 B7 c2 I5 u) D

3 G" {$ r& l% a4 |! |# S) p: P*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
: g+ o- C! K4 D+ f' |; l
# I7 D% d3 A9 E, l8 Q) @  g各SVN项目库的名字,全部都写到这个xml文件中。! X  ]6 d2 u( G% r- r) {2 R, G5 T
3 ?: x9 q+ \  C8 g: M- J/ }
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
* }: J1 r2 V, P: ?3 h, F  s7 ~4 r1 ]+ F5 `, }
& J2 \0 K' v+ Y3 X3 K2 t
2、$ cat bak_project.sh
& p# I! g4 a8 F#/bin/bash
& d& a. a8 E" p7 h
, X2 p# Q5 C' e& Ifor i in $(cat svnlist.xml | tr " " "\?")+ J' Z" k2 O* K- B# a
do
: x+ o" O2 o6 f; p% D; h  O: V% G8 k8 J% N
mv /svn/svnrepos/svnRepository/$i /svn/svnrepos/svnRepository/$i_123; h) i2 ?/ z6 h! T
7 C" }4 K9 Z% _
done
& w: A' x( _# O, g" Z+ h/ p4 S7 |) U9 P
pwd+ f! P$ P+ u. {! V! @1 G: N. C
1 {  ?7 a' `; S. g4 v  p5 R9 Z% }
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/2 V9 u* ?8 z. E" `2 p
" Q7 b" W- _1 z9 H+ m' X4 E
上面这个脚本意思是,把原项目先备份重命名一下。; R2 j% P  q2 U/ l+ d
9 M1 L) m) o: B: g1 B1 U8 q2 {
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
8 e9 K9 M# E( ^
& i/ n* E+ h- p& D3、$ cat createSvn.sh 9 x/ w" t% K1 ]* ~6 w
#/bin/bash
  H: d  E# N- l- D4 N, l# B* ]+ ~6 }3 Y: y: J! J# f
for i in $(cat svnlist.xml | tr " " "\?")/ E9 q/ W- r! |: X9 q. q/ j, }
do6 _8 R' C9 x" V# b
% Z1 U$ K; H4 D
svnadmin create /svn/svnrepos/svnRepository/$i, e# h9 Q. Y& M% e; S
2 k2 m+ \! R, x. i
done
2 M& ~1 i: U( I: ^/ B
( ?5 E# n; v! y3 d- f0 ^) }chmod -R g+rws /svn/svnrepos/svnRepository/$i$ f( U- F( B7 ]6 J7 ?* t
chmod -R 777 /svn/svnrepos/svnRepository/$i
3 T- }8 ~, R! O- H
3 O' ?) r+ @6 e, d9 }* G. Msleep 2/ b5 H  Q2 U, ^4 A. p. G
2 N3 ?8 D! `" h  U/ K8 U1 \
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/$i/hooks/
. l; A2 o. ^0 ?2 H  }7 U; n; o, k) v9 A, X4 k( C
pwd
( P* }9 R$ x' Y& J! s6 g
6 N  |0 p" h% C4 s+ T4 }*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
2 m6 r) w5 ?, i$ Z, y
1 o1 p! O7 t0 M5 O 上面这个脚本意思是:2 f5 t) |2 N0 O- @2 A& t
1、先创建一个原项目空的SVN库。* L! C, ]- `+ S
2、然后给项目赋予读写权限
; l( R% f+ ~. V; a2 i3、最后是把修改过的 pre-revprop-change 文件,copy 到新建的 空SVN库的 /hooks/ 目录下。% z) G6 b3 J* V$ ~( X( Z% F

4 P# d: n( y- O% ~*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/( D: b1 U" ?# J  y* C) g' _

, S9 ]( }/ a2 i8 R: N6 K9 O# |4 r- M) f4、$ cat  svninit.sh # q- D* k5 m- X: ?4 Q/ _" k" c" s. r
#/bin/bash
3 X$ O4 t/ f8 O* o  `3 r! B/ }0 D5 O6 c! `1 o% R" ^/ }
cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks
# Z+ U$ s6 h: `3 P7 [9 o
+ v3 o9 i. b8 i# J1 tsvnsync init http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI  http://120.239.101.99/svn/Android7.1.1_SHHAI& P/ N9 Q" V2 U

( G) R  O4 Y( Q# k/ u) dsleep 3
* M  B! J% a" j- V( l7 P# Z5 Epwd3 y3 ^4 z6 E, N! v' \& [
4 b1 [3 O) h+ [8 q7 @8 a
cd /svn/svnrepos/svnRepository0 ^- h8 E4 E+ O- ^, k
mv Android7.1.1_SHHAI  Android7.1.1_SHHAI_bak+ t$ O: E" w; h, F8 }9 U

8 l1 v2 E% K  ?/ hsleep 3) `+ S% ]6 u- }0 E# M# ]
pwd2 {0 F5 f" Y8 S  H( M! Z& Y

5 O$ d+ x+ _/ ]$ c' n$ ecp -rf Android7.1.1_SHHAI_123  Android7.1.1_SHHAI
/ I1 D$ K5 J" P, M% _" e' H$ a2 j2 W) }
sleep 1- b8 h& {- Y2 o6 S: A/ ]
pwd" g7 E1 g( {* O) e2 K; w, y" v" X

/ ~5 d* d$ a2 h9 j/ B8 ecp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks/& r, w1 I7 R. K4 V5 M8 y6 p
/ i1 O6 |! C7 }9 t; ?3 _- ?
pwd
  p! J+ c4 T$ E
% {$ U# A6 `! u; q  b2 d*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/, M- }5 d5 N$ A! l1 a
8 a" i% e! Q0 K$ {
上面这个脚本的意思是:
0 V/ {% C, m4 Q- d4 J1、在新建的空 SVN 库中,执行初始化操作。' x; v1 o  q- ]5 G8 W8 R8 j
2、然后再接着把这个新建初始化的空 SVN 库移走或重命名。 & p. e  f+ o4 i* s9 o3 P+ ~  a: l( v
3、在 copy 第二个脚本里执行过的,备份重命名原始项目。意思就是把新建的初始化的SVN库移走,把原始项目在还原回来。' o% g8 {" m, {: C
4、最后也是要把修改过的 pre-revprop-change 文件,copy 到还原回来后的项目库 /hooks/ 目录下。2 @: r% l$ u3 k- l' N. S

7 \4 ~3 [* T& q
( j) t# S: L7 x& y* ~*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/" f$ K5 C, R" _) c2 p6 g
; g  Z1 S, e! L' }% [) w2 S2 E. J4 _
5、$ cat  copy_uuid_sync.sh 4 A4 `; A9 I' \8 N
#/bin/bash
5 y5 Q% u% m. z+ A8 Z& r
3 I+ ^* D$ u( J: a3 lcd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI_bak/db/
5 o7 P$ w7 A0 D6 {( y- \8 t5 icp uuid /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/
0 u; s' D7 T  t3 P8 B+ q
4 ?; ~. |0 B: zsleep 2
" y! z; e# V: j2 k, \pwd
$ F, Y  U' M& N( r$ Z/ N) J9 k1 q% T5 Z
cp revprops/0/0  /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/revprops/0/4 p! X' T" ^5 @) F, S4 F) h
7 M" C/ [7 a' j
sleep 2- S" X4 G1 i1 ?, o
pwd
8 ?0 v  ]; x" i0 B( l. V4 _* ^5 U. X  T9 p) a; Y# a
cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/
" j( Q" H5 \; h7 f$ S
7 T$ a+ H( ^4 z: M& I* |/ y9 r, rsvn propset --revprop -r0 svn:sync-last-merged-rev 117 http://110.139.212.88:1010/svn_gasyb/Android7.1.1_SHHAI+ o- O+ t0 E9 J. @% y$ c
& g$ D1 r# i% v5 |* D) c, y& \
sleep 1
. }- G! r! ]+ n! y6 f& r3 Z5 e+ p% f7 z6 n
svnsync sync --non-interactive  http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI --username ab#cd@ef --password ******4 P- r1 g3 ?( \& O: M; d+ u9 q: g9 `

& Q9 k, i# m" y6 @pwd+ p, [; m7 b  {& M1 C8 M1 t
3 E1 ~; v4 ~1 e
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/. t6 n2 |8 \+ q* j0 ?* _- ^$ W" e5 y
6 s0 g! l  }7 J
上面这脚本意思是:4 ^" V4 X, w5 B( Q) ?

4 v6 h* N  y. w6 Q, K1、进入到初始化备份的那个新空 SVN 库中去,也就是上面第4个脚本执行的第二条结果。
; U  ]8 e+ @9 I  g7 C- t3 h2、copy uuid 到原始项目的 /db/目录下去,意思就是新初始化后的空 SVN  项目新生成的 uuid 文件,要替换到原始项目下 /db/ 目录下的 uuid 文件。( w% N9 `7 e! j
3、copy
revprops/0/0  到原始项目的 /db/revprops/0/ 目录下去。也就是要替换原始项目下的 /db/revprops/0/0  标红 0 文件。
' P! o% ~( {9 ?* J6 d4、两个文件都替换好之后,就好执行
svnsync 同步操作了,注意版本号: 从 "0" 版本开始 ~ 最新版本 "117"。
/ ^7 f$ N/ X! s4 h, C
5、所有脚本都正常顺利的执行完成之后,两地的SVN库也就都同步了。
" A+ x) N" g! t, t- h1 K$ w0 R7 I( {& i: G
* j# [) S8 j. e' e3 G# ?
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
4 E* Q  H6 m/ p  x% D( j  Q
4 Q, X, x: P; y5 R3 }5 z
% E% n3 R, J0 ^: t- c

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
 楼主| 发表于 2017-10-31 10:07:13 | 显示全部楼层
异地远程同步迁移 SVN 库就算是整理完成了,脚本比较简单。
! l2 A  b, o4 X+ R3 u% n2 O- i5 x8 `( d4 v4 U8 Z6 M# \# U! M
大神们可以优化脚本,实现全自动执行。$ t1 a# _1 t0 o& F- O
# a- L9 R% t( {6 e3 g6 w% e
原理效果大致也就这思路
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2018-6-24 15:21 , Processed in 0.129214 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表