SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2388|回复: 1

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

[复制链接]
发表于 2017-10-26 18:09:34 | 显示全部楼层 |阅读模式
本帖最后由 yjg021 于 2017-10-31 10:04 编辑
6 L( w+ u* U. f/ w) R: b$ v% g4 M% |7 ]0 H
异地远程迁移同步SVN库,操作模式大概如下图所示。( I1 \0 @, m/ _# {: @5 \, }% |
( v  O0 x: M" d9 s* Z% y' J: Q

  Z) d- }# I$ k1 g. ]" Y
* ^9 \$ c2 S3 |$ S3 T& Y: k7 [" u 按如下 shell 脚本执行顺序一次操作即可。
5 i/ |0 w3 p4 X' x4 l) Q
" R( ]( _% h1 \0 P1、$ cat svnlist.xml " g% I) o1 _% J
) l4 b  j) |& _" ]( c/ A8 d9 B
Android7.1.1_SHHAI/ l2 Q4 t% Z, b# Y3 e# g$ ]+ ?
Android7.1.1_BJMO
- X# z5 d/ P' h5 f
; w  b" s, V4 ^*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
; C  M$ j- A# B5 M8 S# B% |' x& |$ c$ L) V1 \
各SVN项目库的名字,全部都写到这个xml文件中。
1 k, `6 Y# v  S( |1 J4 Q, ]% `9 I) e( Y3 x* d
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/: E8 j9 F: W% g* v7 i9 J8 O

6 E) X; b4 ?, l$ W( G3 R) J- s- f" g6 x7 Q6 L* N  @$ F* {
2、$ cat bak_project.sh
' S" n* w  A. q) J& @+ H#/bin/bash- V5 T) X$ E7 P

  Q9 j* a! m2 Z/ l; x  {for i in $(cat svnlist.xml | tr " " "\?")
0 K4 |& `4 j. Y& E7 A) l+ G1 }& Tdo
+ u0 L3 D& Q7 u
) Q  p) ~- y; L; d: a& qmv /svn/svnrepos/svnRepository/$i /svn/svnrepos/svnRepository/$i_123
. O- Z- u% l$ a6 [- e! ~2 h1 ^0 k. Y
done: V1 c8 n# K( u7 U1 L0 `, g
/ x& A8 U9 ~2 }" t- T. v# f
pwd
& w3 i: ?+ a7 r9 {9 o
6 d: @3 \4 x1 e/ ?* S0 ^/ K9 q*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/' G) Z. |. {6 c8 e( D

" G; T$ `# ^! E上面这个脚本意思是,把原项目先备份重命名一下。
7 X0 ?4 q; R8 Y2 }& w7 V
, U  J/ B/ w( L& H( [6 h4 o*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
' l& w% Y& U9 q2 ]2 e1 T7 m0 b5 J
0 L) J' j8 Z9 @; j4 Z) t3、$ cat createSvn.sh 0 k3 b; g  |4 D$ H
#/bin/bash9 e2 G9 q, }0 [" L4 N% ^
) p, K( e  o& s1 F
for i in $(cat svnlist.xml | tr " " "\?")
( R7 H9 O, M4 ]+ ~1 {do
5 B8 f  B4 y8 A. p) q% o" @9 e9 l/ d: Y7 u
svnadmin create /svn/svnrepos/svnRepository/$i3 F1 X7 q2 V7 A1 j

( y7 \% p0 }: `& T" L" d2 r5 Qdone3 r2 y( f: d. w2 g+ t. r+ {
7 h" y) R8 W+ t& \. j
chmod -R g+rws /svn/svnrepos/svnRepository/$i8 z8 s5 G# a' l* w* U
chmod -R 777 /svn/svnrepos/svnRepository/$i
+ Z5 z2 O8 G0 U1 L
1 @- {1 h% @' @! @& y& E' Usleep 2) v3 t7 s: V" A* k, D
; b' |9 S: |* l; g! Y
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/$i/hooks/
. a# o! ~3 f8 F* Z) e9 ~# I# D) {4 D/ G/ u
pwd$ w0 ^% {3 A4 K8 m

# [5 \: W$ |: j! c' A8 Z2 J0 J/ |*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/$ d$ p1 U; v, ^( X5 F$ z

) u2 ]; X5 Z5 M; o, `; R5 N 上面这个脚本意思是:- H9 S' I; F% k/ {* U* d/ a
1、先创建一个原项目空的SVN库。
3 e; ?# B+ j4 `  O$ |3 H- k2、然后给项目赋予读写权限
( e9 [% z  Z; I! w/ e: g3、最后是把修改过的 pre-revprop-change 文件,copy 到新建的 空SVN库的 /hooks/ 目录下。
' X) @8 w; t" ^
, Q3 n* A; L6 J*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/. L( f6 \( z( h! J. B( _3 c
' D/ O4 f7 c9 V5 D( O  `3 J; O9 \
4、$ cat  svninit.sh
$ y, }. g+ ~+ m8 }& k#/bin/bash) C. G* q6 `7 t3 b" y! w

9 H5 ~! T6 b8 O# s. Acd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks8 r3 _% f$ R% g: G8 d: K
, y* i6 ~, D8 m( V( @' r
svnsync init http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI  http://120.239.101.99/svn/Android7.1.1_SHHAI( V9 s7 P+ C" l; Y
) D% Z6 ]8 G2 w! ?# R, H6 g1 r
sleep 3
: t* J3 q2 ?$ D. Kpwd
# K  Z& M7 L/ |; k# h! [+ P) y+ S' r4 @- ]: H) @& e! N( M  W
cd /svn/svnrepos/svnRepository
& z* e$ J6 b( ^8 I: ]# u- qmv Android7.1.1_SHHAI  Android7.1.1_SHHAI_bak
# ]: N5 @/ b) ]* W3 H7 O
3 d2 ?) H( P) Z4 y& gsleep 3
. a9 M, Q! Z2 n5 e  Lpwd
7 @  x5 T! b! t4 z$ T
0 Z( I: \1 s5 g2 `; }0 l0 Wcp -rf Android7.1.1_SHHAI_123  Android7.1.1_SHHAI
( a% \! \& J5 ~  I4 t
8 X: @6 b5 D3 e0 E% y* A4 Z; xsleep 1, ]0 M' W% p9 m8 h. `( n
pwd
+ I8 b; w6 P, }& u$ f7 R. T+ W; ]. V. o" ?
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks/* d, J; t' h& i# h" J$ ~

5 w8 J8 C4 m* T& \8 e7 npwd
' e2 d! R% o7 ^" h6 ~# j
: c5 T* E4 G6 P$ T  ]7 r7 g*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
; B. B! N$ u  l# T2 r  o8 d& Q4 m
' A0 F0 O- g: W2 T9 L上面这个脚本的意思是:/ H8 S  G) h  c6 f4 a& D( T
1、在新建的空 SVN 库中,执行初始化操作。
3 V5 g+ m- Z' y) V6 ^2、然后再接着把这个新建初始化的空 SVN 库移走或重命名。 2 H0 F& L8 `7 }3 l) ~9 G7 N' b
3、在 copy 第二个脚本里执行过的,备份重命名原始项目。意思就是把新建的初始化的SVN库移走,把原始项目在还原回来。
4 K0 A, c2 r9 L( Y* }4、最后也是要把修改过的 pre-revprop-change 文件,copy 到还原回来后的项目库 /hooks/ 目录下。
: t9 ^( }' ]; v4 l8 X6 X2 P4 h7 R
* i! Y: R3 A: Z" j& L( Z) ~7 x; X0 w
9 H3 q( ~$ [& [2 K; @2 H9 q) p*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
1 N$ u( B1 Z2 w( v1 S0 @
# _/ H; H9 _+ p* i/ a5、$ cat  copy_uuid_sync.sh
$ B4 C+ a' A" q% f0 k#/bin/bash- l0 Y) s( D1 T- g. c2 C+ E

- M- U) W5 Y9 rcd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI_bak/db/% ]5 w% I7 p8 o3 Z4 I
cp uuid /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/( ^/ [) B( ~8 p$ K+ w& g( l
( T! T- k4 c( U+ O$ `, G7 U4 h
sleep 2
- x6 f2 k9 ~& l6 a* {4 [/ o$ tpwd
6 P, k: j) {9 M; T3 j$ s- O3 [2 P* U$ Z# _
cp revprops/0/0  /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/revprops/0/) |8 d& t  P4 w  q* z. z
# c% z- i( e5 r$ q: Z
sleep 23 m& q( k6 ~) C' w- M- }3 ~6 n8 c
pwd
  X! G& G! C$ j7 R* _3 o: ^% D. @: o6 }3 i( ?: Y7 d
cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/8 R/ p1 J8 Q- x2 V" c
* b$ t0 f( N  C* s( w7 C2 m
svn propset --revprop -r0 svn:sync-last-merged-rev 117 http://110.139.212.88:1010/svn_gasyb/Android7.1.1_SHHAI# k# \2 W. j7 T# \3 ?4 K' s

' c" G+ Y. h  H8 L1 R9 a1 xsleep 1
' B5 Q" k- }2 S' \7 Y$ x! Y
4 P8 X- S: Q+ v" M2 Asvnsync sync --non-interactive  http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI --username ab#cd@ef --password ******# h1 W- i4 b0 o+ Z  j2 k% c& P$ Z

: V% Y. ^9 `4 N" opwd! s- H& N# K$ I' R
, |+ x8 [9 i5 |) O' E0 I' z
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/! m. L' `8 k& p% [& Q. ]+ R  m

  q" y( n, x/ H  n' H: S上面这脚本意思是:9 h: {/ V; j9 n0 R& E. s" Y, H

0 n8 V5 ?) l5 t0 J1 _4 Y$ x2 C, c1、进入到初始化备份的那个新空 SVN 库中去,也就是上面第4个脚本执行的第二条结果。, m3 s# R6 U; k& J1 Q
2、copy uuid 到原始项目的 /db/目录下去,意思就是新初始化后的空 SVN  项目新生成的 uuid 文件,要替换到原始项目下 /db/ 目录下的 uuid 文件。# q4 N, V8 j4 S: \1 b. b' `3 S
3、copy
revprops/0/0  到原始项目的 /db/revprops/0/ 目录下去。也就是要替换原始项目下的 /db/revprops/0/0  标红 0 文件。6 |, E  h( d6 W. f* S
4、两个文件都替换好之后,就好执行
svnsync 同步操作了,注意版本号: 从 "0" 版本开始 ~ 最新版本 "117"。
/ F* t% w. V$ b/ @
5、所有脚本都正常顺利的执行完成之后,两地的SVN库也就都同步了。
2 O8 E$ Z; j, F8 @: w3 l/ J: F6 p3 `) T8 `9 w4 P7 E6 ?
! W, E  c2 u' r7 G4 I5 k
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
" r0 p! X7 p" \/ Z! G9 d+ ?1 {

+ F1 V9 m9 Z( i* p/ E: _6 u4 q

; m; z4 H( x4 |- U' F

本帖子中包含更多资源

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

x
 楼主| 发表于 2017-10-31 10:07:13 | 显示全部楼层
异地远程同步迁移 SVN 库就算是整理完成了,脚本比较简单。+ ~1 ^; x9 |3 `: M
- e8 n+ {6 ]+ ?( @3 k) ?' B
大神们可以优化脚本,实现全自动执行。6 W, {1 F- \) \
0 }1 e9 f/ Y' C
原理效果大致也就这思路
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

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

GMT+8, 2018-12-11 22:48 , Processed in 0.070693 second(s), 10 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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