SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2111|回复: 1

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

[复制链接]
发表于 2017-10-26 18:09:34 | 显示全部楼层 |阅读模式
本帖最后由 yjg021 于 2017-10-31 10:04 编辑 + d8 q. Y4 \& N

* G* `% n7 u  v异地远程迁移同步SVN库,操作模式大概如下图所示。
5 A& [; n' S) ^# M) x" R+ A) h. U* O0 H( j: t4 H- R6 ~
0 P! r. E( A0 t9 X$ ?9 Q0 O
0 {. O, H9 ?- i7 @& z( a9 |8 p
 按如下 shell 脚本执行顺序一次操作即可。
7 }" ?% [, I7 u! c' ~1 D+ g
, g* ~9 M& }( j4 r5 x4 D$ z0 x6 s1、$ cat svnlist.xml 1 X1 s( T. e  \1 U% p) J6 p

' }$ b8 P: j: K1 k" t' q$ qAndroid7.1.1_SHHAI/ h  Y5 T0 Y: X6 V
Android7.1.1_BJMO5 }3 W4 ?4 Y7 g! b
/ |9 ]- B7 m. y% E' U" F
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
8 _+ Q& u# W6 ^! Y5 P( w# l- ]- \; Z5 \# ?/ s; L
各SVN项目库的名字,全部都写到这个xml文件中。3 P) l2 Q: N* D# A! d

3 ~' p& [# w8 M  P5 |*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/: [9 l3 t" \/ L

4 v/ l$ A  ~: Y0 T  S' V1 b
! z+ c0 m5 h$ A- s+ K2、$ cat bak_project.sh
1 g+ d" r# |  X. [$ [+ p5 V" V. t#/bin/bash4 w! X; [3 k; |
$ j" h( @" l! F9 y% N
for i in $(cat svnlist.xml | tr " " "\?")8 ~4 L7 g- z; K
do
* r5 G. l* S# l9 b) N4 u- I  O4 n& Y" O" c  `; c% z
mv /svn/svnrepos/svnRepository/$i /svn/svnrepos/svnRepository/$i_1237 o8 J$ x# u. E7 E
/ ?: X( D# B# W1 {. F+ P
done
4 Z/ g! J% z# _5 R
2 u" C% E+ q' H; l4 G2 N4 Hpwd
8 l# N1 ]1 ], L( w
  `5 f  U; Y9 F- s*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
* B3 a" H7 Z! }+ L, n
. u+ F1 R. V7 d% T7 J5 u. ]上面这个脚本意思是,把原项目先备份重命名一下。
" R8 C$ M0 E# _# ~. m2 O& F  ?& X+ P# w# U
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
; K, O1 l3 V, z' y, V( R  D3 N0 }
+ \/ w( p. r" V9 Y3、$ cat createSvn.sh
3 P/ P) a+ b- ~5 w  a2 i#/bin/bash
  g9 O. O" s+ K% _% W' ^- S$ l, F4 W1 |" q2 q& E
for i in $(cat svnlist.xml | tr " " "\?")" j: ^4 v6 l: Z. n: m
do1 Z0 s/ d9 f) ?0 [0 q

4 H6 I' e( ^& msvnadmin create /svn/svnrepos/svnRepository/$i
/ r, d; X1 ^" w/ ?8 I; v$ E) L* l0 S9 {( y# [6 j# X1 m8 h
done0 R% w1 F2 z1 C6 _; U0 H  {
( l0 Y8 G4 ]3 _9 o5 s1 @
chmod -R g+rws /svn/svnrepos/svnRepository/$i
6 ?6 }  K: a) Dchmod -R 777 /svn/svnrepos/svnRepository/$i
  a- \; d' L4 l: r0 {# ^" B  k. N, H8 t4 ~
sleep 2& U# V$ o" h( }
; D( |8 Q# g" O! Y
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/$i/hooks/. R) `. _. z7 n# f& B& @
- D3 K& t8 e; d2 M$ o
pwd' b1 [- |; g5 F: k

1 c4 T- d2 @! J$ S" C. ]& O! z*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/: q6 E! Q4 U' j& ~6 ?
8 b+ {4 V2 }; E) S( Y
上面这个脚本意思是:
2 l7 m% V/ `3 ?( }, K' s1、先创建一个原项目空的SVN库。* K: V) o/ f5 h5 a$ M6 M9 X
2、然后给项目赋予读写权限* Q5 _2 B1 p$ T6 n
3、最后是把修改过的 pre-revprop-change 文件,copy 到新建的 空SVN库的 /hooks/ 目录下。
4 W1 G. v- f  D( R9 s: S- p
8 y6 C8 l5 p! N8 ?2 U*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
  b, P" E7 ~% [: |8 U% t0 p
5 N/ X! F- X( I; R! T7 l4、$ cat  svninit.sh 8 @4 ?' G; J2 R/ Z# @( w) D
#/bin/bash9 u/ H) q* a4 |; W) D/ U

! c  S- ^2 M9 K0 B; |& f0 z5 acd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks; v0 l* j9 ]' {% C

1 h2 P* g( O7 w+ t5 _5 lsvnsync init http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI  http://120.239.101.99/svn/Android7.1.1_SHHAI
- n( c- i+ }2 f$ A/ i' B! w/ r: r, o- E" t- S7 d
sleep 3" T7 D/ K! c$ M; A6 z% l- Y4 ?/ ?5 [
pwd& o2 e$ L; v' t6 O5 a
9 w! E( v. S% N. \" x! B; s
cd /svn/svnrepos/svnRepository% ~; s9 S. I+ _
mv Android7.1.1_SHHAI  Android7.1.1_SHHAI_bak& g& n1 M, e0 G. ?9 q

+ P4 h- y/ h! j2 B/ J1 Jsleep 39 q3 P8 z& ]8 V7 f4 f
pwd
8 A6 b9 L$ c  R% }( _+ V' ?; {: a4 v0 v- A6 s2 w0 w7 {- q! Q; N; a
cp -rf Android7.1.1_SHHAI_123  Android7.1.1_SHHAI
* j4 l( }( M. d& N5 ]2 {/ V, ]
. X  [/ h5 e) L9 }sleep 1
4 C5 `! U: ~) W, W! v  Upwd0 H1 u" t" z: Z2 T) J) D( b4 a
% h" S4 F( N  F7 C
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks/
0 j& h7 L7 I) \2 s
# V; V5 v' U! vpwd
3 q- H. ~1 p& b1 C7 x
' v1 J: s# i6 t' ?  d, b1 |( b*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/: r2 Y( x+ p! V6 m& ?) i
+ F5 d, B' p  x  l& w9 }6 |/ I' M
上面这个脚本的意思是:$ j8 ?+ ~2 n% p2 a
1、在新建的空 SVN 库中,执行初始化操作。6 V- [- j8 H7 g3 c1 N1 p1 p/ X2 I
2、然后再接着把这个新建初始化的空 SVN 库移走或重命名。 " t; _! B& R; X( R& ]
3、在 copy 第二个脚本里执行过的,备份重命名原始项目。意思就是把新建的初始化的SVN库移走,把原始项目在还原回来。
* C9 E( }2 c+ n. W$ b% J9 I1 h, m6 T4、最后也是要把修改过的 pre-revprop-change 文件,copy 到还原回来后的项目库 /hooks/ 目录下。+ L/ ~* `: G1 Q* P! H! b  ?

. Y8 z; x3 P, w% Q' t/ k! J1 u( o6 M0 H2 n
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/6 d; R3 i' u  {9 n
; H0 ~4 A2 J- }2 p3 @4 M8 y
5、$ cat  copy_uuid_sync.sh 9 u: d2 t! J$ U+ O4 S
#/bin/bash) T/ T5 \3 m* M) O, y5 o

; D# _. L. T, D! scd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI_bak/db/" h7 X" V' A* J. R' q6 G' N# e, \2 c
cp uuid /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/) F, q& a0 F/ w

! ?  _2 S3 G, Isleep 2+ r8 Q4 U- |7 p+ n5 e$ w
pwd
5 P7 R; P4 @  M$ v& Y, D
0 F6 l( o! a' L8 C4 N0 ]5 Qcp revprops/0/0  /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/revprops/0/" s1 P- F1 l0 z& O

7 E5 m% q8 w% usleep 20 f- F0 k" k& U5 @. r
pwd
. w0 Z/ T- A! C2 G  c9 o
3 ~$ e! Q' ?4 h& f9 ~cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/
) q& r- ^0 o6 K) v6 M8 v* G( ?: H1 l7 Z' O. c& a' I
svn propset --revprop -r0 svn:sync-last-merged-rev 117 http://110.139.212.88:1010/svn_gasyb/Android7.1.1_SHHAI( i( D5 ]  M3 u1 ^$ o6 e2 w8 ~# }( t. l

* q  k% K- \6 O2 Qsleep 1
0 @5 b' o- c5 a. z! Y9 }  x6 Y' L, `
: q0 f. C" Q& r8 p  V3 Dsvnsync sync --non-interactive  http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI --username ab#cd@ef --password ******
0 _( d5 t0 G2 l/ `7 p& F# i7 r( k- ?
( M7 ^4 p2 Z& apwd, s0 M  m2 J9 Z' Q
6 R' r# c& R( }0 P" A
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/- u7 v$ M8 f$ r2 j  R. w

# L2 L, s0 \; t. i' R0 L- W+ u, q  P上面这脚本意思是:
' m  k  h: _/ y. L
* Y' a* W8 n7 f% _2 d2 {2 u1、进入到初始化备份的那个新空 SVN 库中去,也就是上面第4个脚本执行的第二条结果。
8 V! Y( Y9 _+ Z4 u4 |! J% U2、copy uuid 到原始项目的 /db/目录下去,意思就是新初始化后的空 SVN  项目新生成的 uuid 文件,要替换到原始项目下 /db/ 目录下的 uuid 文件。1 j  Q0 L+ _: z( h  s% }1 Q- D  T* a
3、copy
revprops/0/0  到原始项目的 /db/revprops/0/ 目录下去。也就是要替换原始项目下的 /db/revprops/0/0  标红 0 文件。; ^9 N2 f$ m- ^& a1 F. N1 P) X
4、两个文件都替换好之后,就好执行
svnsync 同步操作了,注意版本号: 从 "0" 版本开始 ~ 最新版本 "117"。
+ r$ L( D) M! r8 J0 Z7 b5 l
5、所有脚本都正常顺利的执行完成之后,两地的SVN库也就都同步了。
9 N3 s% y3 a5 }1 e4 H$ M, X! i6 Q" U0 _
/ j( n1 K5 W4 N/ m8 z
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
; ~: W/ ]8 v+ D  M8 z: s* Z9 {, I

2 O" i- a+ K. c8 e
4 S3 ^/ K: A. H0 I2 Y/ M* x

本帖子中包含更多资源

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

x
 楼主| 发表于 2017-10-31 10:07:13 | 显示全部楼层
异地远程同步迁移 SVN 库就算是整理完成了,脚本比较简单。/ F3 [3 @/ e9 \, j2 ~8 B2 B2 m8 ~  Q

# m( i) X. d+ I1 n- A5 h大神们可以优化脚本,实现全自动执行。! O7 v( v8 |) E3 \* s5 u7 L
7 d. K2 Q- {% v/ z8 A6 O* I
原理效果大致也就这思路
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

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

GMT+8, 2018-9-19 23:37 , Processed in 0.065295 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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