SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 705|回复: 1

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

[复制链接]
发表于 2017-10-26 18:09:34 | 显示全部楼层 |阅读模式
本帖最后由 yjg021 于 2017-10-31 10:04 编辑
' j% ~" L/ t' v6 n
) }  _6 x$ F8 J! X3 |& I异地远程迁移同步SVN库,操作模式大概如下图所示。
2 k# V6 ?$ R- {* F
$ ]5 D1 ]; r5 ~. Z8 S; b( ^5 r9 I! X* g' M- @% _2 s
" @- i2 t; h! K8 ]& g" z
 按如下 shell 脚本执行顺序一次操作即可。
  R, `; v7 \* B' r( l% R  r
! d9 z* r* w7 {( j0 B$ R0 F2 o1、$ cat svnlist.xml
" `) W8 G3 `  R& i; T' \7 |1 b7 Y8 t8 t$ u& g1 B5 l3 m' N' X2 g* T8 `
Android7.1.1_SHHAI
5 c& y* [$ z& Y, ]Android7.1.1_BJMO4 @. f0 r0 M4 w$ ^: d) d

* h. F, f2 ~" u8 C" d, B*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
7 R1 S& P* O9 N) h  D6 R
: O' o: u1 k  @& u+ n各SVN项目库的名字,全部都写到这个xml文件中。" K/ v- N1 b: z8 x: A; a2 _* K4 }6 _0 \
9 K. W% q' x# y
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/, s) a; L- R( m1 i

4 b1 J' I# z2 N9 ?
+ f+ ~( a, r5 P. b* t2、$ cat bak_project.sh ' N1 ^/ |, H/ B  _/ J* D5 M
#/bin/bash
5 X  h" O# L5 A4 r: ~) `" [
" c& R2 |$ M/ W5 z7 O/ x) Qfor i in $(cat svnlist.xml | tr " " "\?")
1 m" w( o8 p6 o7 rdo
( a2 d% _$ I0 m6 X2 O0 w
% j7 G2 ?; P! ?. m! y. O" {mv /svn/svnrepos/svnRepository/$i /svn/svnrepos/svnRepository/$i_123+ Z1 F6 L$ ]) |2 ?5 N! H
* x( ?; y! F! J8 B8 P5 [) D5 h6 {# r
done
& `) g/ p/ d% C# i( h- ]: B5 ?4 C% n2 K9 A
pwd4 c) q' A' a* O8 ?
: B6 |5 ~7 v1 t' y
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/  w: `% E' U4 h% B6 i
  l# A9 H4 l2 K7 Q0 g; `
上面这个脚本意思是,把原项目先备份重命名一下。. }* V' V! C2 H1 P) h# V
  [$ g* U8 N/ `9 N# _
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
2 f) G# v4 m( w* @- r
' Y: R; G. i2 L. p* ]% N3、$ cat createSvn.sh $ H0 i( U7 N. y# v( o
#/bin/bash$ E, Z8 I) e9 E; U3 _8 \% L( `
% z- h- t! r, C3 W
for i in $(cat svnlist.xml | tr " " "\?")
1 w2 k5 D0 L7 Fdo/ O- L% W) S8 K. w% {2 k5 p' S
! `) R4 I  S4 c' q3 u, R6 D7 }
svnadmin create /svn/svnrepos/svnRepository/$i
9 O  e2 r! N. y6 `. \% g4 m
$ X: ]' D; Q8 j+ T1 [" k# {9 j) Vdone: m2 _4 K6 l; z8 s- ]& B& V# w4 L( p
( ~5 G# \$ d' E4 E4 x+ G
chmod -R g+rws /svn/svnrepos/svnRepository/$i2 L# ?9 w1 ^" [& b* _, w
chmod -R 777 /svn/svnrepos/svnRepository/$i/ Z8 l0 t4 |7 u# o% s9 g# o4 E. O

7 `; `- `4 n  w  Qsleep 2
3 d/ y* o! m+ f& z' h! u- q' M( w  X3 r  L$ O% w
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/$i/hooks/
9 q% @4 x! C8 Q7 T' y
; `( o0 @# b  W; y% rpwd' d, c1 o" G* n3 ~8 ?' A  q  p
, O& A0 P6 D7 T6 \# R9 V
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
4 S) o$ D7 d1 ^1 r5 Q2 ^
8 E3 }* W" B. n9 c8 P* r 上面这个脚本意思是:
5 {3 p7 D1 H/ A* g1、先创建一个原项目空的SVN库。2 A4 V9 W  j3 E3 o$ X
2、然后给项目赋予读写权限
& [2 f+ B7 `1 f- ?9 z% Q, {3、最后是把修改过的 pre-revprop-change 文件,copy 到新建的 空SVN库的 /hooks/ 目录下。
  f( A) B- Q/ u
) |2 K9 r$ X1 j: k- a*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
; J# \/ m# K1 [. C1 |
) [5 c: e. r& R& `1 }; u7 `4、$ cat  svninit.sh
/ `! j; b! o/ h* O5 e0 v% R#/bin/bash
  b1 h  F2 Y' E% u$ R+ @
5 c; R6 K: ^7 W' u/ i* Q$ ocd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks( ~" a! V9 M: R' }3 M% L' I7 |

" F; X4 n; V% w; @! Lsvnsync init http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI  http://120.239.101.99/svn/Android7.1.1_SHHAI
# x8 [7 q- H8 ~+ ^
( E7 n6 c7 F$ J! I! j% ]) r, v1 vsleep 3
- [' R: c1 N4 K+ V" fpwd
$ a3 d6 u7 d. ]% A7 t
$ Q; i0 J7 o9 I( g/ ycd /svn/svnrepos/svnRepository+ y6 s' f, Z5 m! x: E
mv Android7.1.1_SHHAI  Android7.1.1_SHHAI_bak* `* _$ O% ]. w2 O- y: B

$ T8 u$ C/ |/ \/ i) i$ {sleep 3
/ \! r& {9 @3 w( R6 O' Cpwd+ N) E! x  E* I! _* |3 e
/ _- P5 m, w5 i) y
cp -rf Android7.1.1_SHHAI_123  Android7.1.1_SHHAI" }1 f) j3 g+ m, F) {+ ]
  X1 F' D' y1 e) J3 y" P$ O
sleep 1
  @: u1 G& g1 [( U3 Hpwd
7 b  P  T4 g. ?& e* \" E2 m- A$ x; k" w( ]2 o# w
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks/. V# R$ X: l$ t- }, Y  W) L! U

  T/ a4 h( p: ]9 i2 ]# Npwd
) _( ?3 z! {& {
! A; C, q6 |* w. Q9 y1 b; m* r*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/; j4 p9 U  [( ^: w0 |
, o$ F$ B- w( M4 i# W" W4 B
上面这个脚本的意思是:( X/ E6 S( Q9 v- F+ N
1、在新建的空 SVN 库中,执行初始化操作。
- _! t' |% ]! I! D( i. ~4 s2、然后再接着把这个新建初始化的空 SVN 库移走或重命名。 3 ?) N5 `1 A+ j  l- Y
3、在 copy 第二个脚本里执行过的,备份重命名原始项目。意思就是把新建的初始化的SVN库移走,把原始项目在还原回来。
: @; j- }) x, j) }/ w+ A" r- F4、最后也是要把修改过的 pre-revprop-change 文件,copy 到还原回来后的项目库 /hooks/ 目录下。7 {# Z/ Y" o2 T5 I( ]

; V! `/ o' f( L# R, d# w/ m
. k& o8 p- W" w4 a! a, j' G& G*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/' z2 Z- [' h2 Q0 T# O5 R% }, k

+ u7 b2 Q* R: D+ V# P5、$ cat  copy_uuid_sync.sh + d7 o& S% L  R+ x
#/bin/bash, c, a5 I) X1 F# j/ A3 A/ e% v6 D1 w

: R+ v3 @+ A6 @5 \0 k5 Fcd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI_bak/db/8 z! j4 x3 f: @$ P* o$ X' y6 n
cp uuid /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/% H! C& Z% S4 s4 _4 V

" y& p( Y" t+ bsleep 2
1 j/ q2 @. B; Z' [1 Xpwd
/ H0 g9 ^" u# O5 [& l% m- e2 G! }6 `" c5 p6 b( X: D# _- ]  m# ?& K
cp revprops/0/0  /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/revprops/0/9 G6 e' `1 V) c5 ^- z; f3 m! A

8 O2 X3 L; n6 l$ N% s' Ssleep 2
. J/ c8 }( ?7 |, {2 j( ^pwd" ~& G% ?# Z3 R. l; v
1 b: z3 i6 C5 [5 D% X' C
cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/
/ ]8 K" F& C8 u! g. f: B# W6 a( m6 K$ u
svn propset --revprop -r0 svn:sync-last-merged-rev 117 http://110.139.212.88:1010/svn_gasyb/Android7.1.1_SHHAI" A# t/ T) D2 h' ~: X% X! b; g' Q
  G' S6 d9 U) F
sleep 1
. Z) L0 w! G9 C, E, L4 \" o+ j% I4 t9 j  F5 A0 J; H
svnsync sync --non-interactive  http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI --username ab#cd@ef --password ******
  M4 B; v- R8 W; m4 [) Z3 @. @, @0 R3 h. K* z9 @
pwd. G/ e8 Z3 X' Z8 V. a

; O) h# f8 u4 ?  }4 O5 Y*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
# `& K& `1 _+ D
- }' H) V8 e$ }$ o6 Z$ _% F上面这脚本意思是:
6 L1 q1 E( I  d! T0 l, y4 I! O/ g  x% |) M1 K6 M9 M2 ?( R
1、进入到初始化备份的那个新空 SVN 库中去,也就是上面第4个脚本执行的第二条结果。
$ R7 M( \1 u0 \2、copy uuid 到原始项目的 /db/目录下去,意思就是新初始化后的空 SVN  项目新生成的 uuid 文件,要替换到原始项目下 /db/ 目录下的 uuid 文件。
/ l. X! c0 p# k$ m. J* U5 _5 L) a3、copy
revprops/0/0  到原始项目的 /db/revprops/0/ 目录下去。也就是要替换原始项目下的 /db/revprops/0/0  标红 0 文件。, J0 N. _- R/ |5 C! H" ^
4、两个文件都替换好之后,就好执行
svnsync 同步操作了,注意版本号: 从 "0" 版本开始 ~ 最新版本 "117"。
) @( V& ?0 m- O) v3 C
5、所有脚本都正常顺利的执行完成之后,两地的SVN库也就都同步了。
$ V1 K4 K- U8 }7 D( e$ B4 o
: w6 Z2 K. q- c2 D7 X% A2 g/ Y2 w

* k; V2 {. K, _8 Q1 {0 ^*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
. u. Q4 G, i" ?( X0 d

! p+ X# h+ s1 ?2 Z
2 s# O# G3 l5 ?' t' ^

本帖子中包含更多资源

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

x
 楼主| 发表于 2017-10-31 10:07:13 | 显示全部楼层
异地远程同步迁移 SVN 库就算是整理完成了,脚本比较简单。4 M, [2 s4 P. D) Y  T

, F5 B0 f7 s9 G5 F% G大神们可以优化脚本,实现全自动执行。+ C7 c2 {- r9 i

7 r6 n6 d. Q/ Y& h7 ^/ J1 S4 H; _原理效果大致也就这思路
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-1-18 09:09 , Processed in 0.066990 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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