SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2703|回复: 1

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

[复制链接]
发表于 2017-10-26 18:09:34 | 显示全部楼层 |阅读模式
本帖最后由 yjg021 于 2017-10-31 10:04 编辑 0 T( F  O# v- A

' R9 {/ w. E% {$ U$ p/ ]# ]' u8 V异地远程迁移同步SVN库,操作模式大概如下图所示。1 a( @! b+ u" t, n
2 a3 |0 U- I" O7 O2 M
  R8 ?( K- ^/ R. L5 \3 n7 i

2 \2 I& d' K8 z( O( ~$ _, K 按如下 shell 脚本执行顺序一次操作即可。
+ ^, \' V# e; i( S' w! a
: e: z- A$ E, |1、$ cat svnlist.xml % z* W. x: ]  V
- Q( [& |2 b) J
Android7.1.1_SHHAI- P4 m1 Q* E1 l# L+ e0 H: L
Android7.1.1_BJMO% A  T+ u) f( S, `
1 o  F# B; S% @# j$ |: Z* \
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/8 r5 u. @* ?( O, Z

- u6 H( M' w9 d) r, p+ }9 _各SVN项目库的名字,全部都写到这个xml文件中。$ [% W* o+ M  ]( e* V
: d2 G' ~) _9 |. }/ Q2 E( D( u( h
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/: ]) @; @2 L" D6 h) K! J* {( Q; b
, N0 _  v0 P# S- f4 L# S& v
' d& {) l) m9 A( ]
2、$ cat bak_project.sh , C. p3 E5 x: b$ T( |5 T
#/bin/bash
% R% ~: P" P; I/ K$ N# Z8 O8 G3 C
3 R# J; h' o; r2 O" m0 e1 B4 C" Gfor i in $(cat svnlist.xml | tr " " "\?")
' H8 R. N# R" F6 Z9 Mdo0 Z0 g; S! R7 d  K  l
1 U9 P5 \1 p. G
mv /svn/svnrepos/svnRepository/$i /svn/svnrepos/svnRepository/$i_1230 [0 ^, Y5 O& }3 P: ], G2 i

, O9 j0 N7 u5 j! R: V2 gdone  ~9 U. }6 ]% W# e$ ~* S8 t1 x; S

* e3 _% V' o& @pwd
% @  R, v. t2 |/ @2 e. a, r
9 ~7 s2 Z- H$ t* s( e" X  U*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
% l  [. [7 y) W' R# y5 w1 L7 Y$ g) d& c) f) A  \
上面这个脚本意思是,把原项目先备份重命名一下。- x8 N) F; Y8 r5 ^" q: F
* b) B; d0 y; X+ Z; L* [. F
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/) h/ I# d# ~( A1 S

4 R2 Y; ?; \5 P. @8 Q3、$ cat createSvn.sh 7 x# D% F% |+ Q4 e, r7 A% H# _$ g
#/bin/bash
; D  R0 f! a8 ]3 o* I/ @( b# M& Z* h* `
for i in $(cat svnlist.xml | tr " " "\?")
6 x5 g1 X- C5 M( t% T3 Rdo- ^; d# O( z0 e: K( c
  a! _" `) m- z
svnadmin create /svn/svnrepos/svnRepository/$i
* `6 A: G) o8 n% W, [5 G
" T. q% ?! K' }/ g; Sdone
7 G& F- w/ y5 g1 ^7 C# L
0 ]# \( Q. J5 Z+ tchmod -R g+rws /svn/svnrepos/svnRepository/$i. @$ k4 q* L' ]1 Q8 @: ?' N
chmod -R 777 /svn/svnrepos/svnRepository/$i" B( q# F: {% l1 \$ ~- A7 k5 m: ]+ w' x- M
/ w' N4 w( a0 r; o) X  s
sleep 2) `* m: E' y8 s* Q' v$ f5 H

" D0 ^; L) e/ xcp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/$i/hooks/
0 z) w0 W9 [0 a. ]" ]1 W# O6 c- Z& J/ @( P+ n$ m
pwd
8 Y+ q7 ~' Z% X& {2 h) `" [) n7 k9 Z/ M+ c6 {' o
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
$ e" K2 d% \% L( ~
3 @4 @8 ]8 s5 B) h! X6 x 上面这个脚本意思是:
* P) z0 c3 L9 `/ F- [1、先创建一个原项目空的SVN库。6 j6 ^( u3 I! {
2、然后给项目赋予读写权限
* ^/ I4 S3 e3 w5 p4 {8 y3、最后是把修改过的 pre-revprop-change 文件,copy 到新建的 空SVN库的 /hooks/ 目录下。
: N) e* n2 d" Q2 D$ d' D
3 e1 y# O" X' |7 Q( q4 ]) O*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/9 V$ T% F0 R! T. x  j  k, x7 Y

. O) \) c* W' [9 a: r  \. ?5 G4、$ cat  svninit.sh
7 [( z% N9 M7 p1 ?$ ]#/bin/bash
0 W* e6 `5 e7 k( G; s0 e+ Q1 a8 `* Z. \" c4 I% Y& U
cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks: Q% B- H9 u. a# F$ ?6 k
( ?% b! M7 A* _, I$ S+ W
svnsync init http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI  http://120.239.101.99/svn/Android7.1.1_SHHAI2 L+ Q5 j3 ~" b' p

% H- \; ?: B4 gsleep 3
9 ~. G. p' ~* I0 c( ~8 H1 gpwd
2 K: m& `- t9 n
* h! @4 o/ I$ v; f* z4 `cd /svn/svnrepos/svnRepository: [% i2 n  R( b5 `! ?
mv Android7.1.1_SHHAI  Android7.1.1_SHHAI_bak
! c2 H4 i( {$ ^7 j/ p  a
! E2 \" u+ f9 F) vsleep 3
- Q  t$ u) X; Z" I6 G# [pwd
' r& \3 e% c: y2 d% ?& z0 n
0 C* t5 P6 A9 d' lcp -rf Android7.1.1_SHHAI_123  Android7.1.1_SHHAI
; A8 ]; g5 f4 D+ g4 C
: s. Z+ S. N# X0 l- w# a( nsleep 1' @2 y: g6 t) e  z
pwd
1 S+ [1 m; v0 f% j4 F3 X
- c/ P/ |% d6 K  V0 {& hcp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks/& M: r5 o) h( m

" b! \1 M9 b# o5 q, G, m! U2 {; Cpwd) @- e! I# ?! |/ d2 o! e5 z
. t% S( r8 j, a
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/# B. y: f. U) Q8 p
) x0 M( W( j2 k: X# I
上面这个脚本的意思是:- x  ~- L; X+ ^
1、在新建的空 SVN 库中,执行初始化操作。
' V. ~" M$ ~9 x0 x0 c* ?, S8 z2、然后再接着把这个新建初始化的空 SVN 库移走或重命名。 # _' P0 F0 p( b+ D& Q# c) d
3、在 copy 第二个脚本里执行过的,备份重命名原始项目。意思就是把新建的初始化的SVN库移走,把原始项目在还原回来。
  }4 d! N: ?8 X0 H, I$ _( }% k4、最后也是要把修改过的 pre-revprop-change 文件,copy 到还原回来后的项目库 /hooks/ 目录下。
3 F% x8 g5 I; |+ A, D& b! y( C* R0 [. @' z
( _! K1 f2 W! m: y% R! C+ I
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/7 Z. ?* `0 l$ B. Y- u8 D

* t( w+ c6 U2 {# z' s" W5、$ cat  copy_uuid_sync.sh
& K5 k$ ?! f" ~3 _, t6 Z* \$ S; O#/bin/bash
. d- `: N9 R  r2 U, A7 o" `) r
9 i6 c1 ]! B. Lcd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI_bak/db/2 v: x' d+ [4 I; a8 x& x/ y/ @
cp uuid /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/; K2 b" c, F7 M, D' P0 O; D% j& Z

7 S7 r$ M8 E) @* hsleep 2
2 c  [) }' o1 b% ~: R6 lpwd
  {8 f9 h4 b2 A& Y6 ]2 X7 j( ]# B9 M: f7 s: V; ~* [- r* I
cp revprops/0/0  /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/revprops/0/# c; a2 K  k1 n: g$ G: b

5 o0 A3 o0 ?0 D+ [' h# D. Qsleep 23 q5 l( p4 J5 [$ N( y/ Q& A
pwd
' L; P- O# [6 N2 W* k
+ m( }# `" |3 g5 B5 T/ Scd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/! Y1 M( L+ u; d  I+ ?( ]
) U- q6 i" p( y# V1 \, r( v$ D1 D
svn propset --revprop -r0 svn:sync-last-merged-rev 117 http://110.139.212.88:1010/svn_gasyb/Android7.1.1_SHHAI- N, t3 z  A" |( I& x0 P/ [1 m
2 B7 l1 U$ \( I
sleep 11 h3 M$ i3 [. b* }, X
2 O( }: }7 Y" |  p/ q
svnsync sync --non-interactive  http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI --username ab#cd@ef --password ******
' S9 a* d( J  R7 p
- t* D2 h" c, Ipwd  ~5 F7 B5 J+ p3 H6 g" V
/ _" t8 @( D' ]3 y/ b1 I$ B3 s  z
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
: Z9 c2 K# ^" P3 \" Z1 L' R, f/ l7 T4 h
上面这脚本意思是:
& x5 `' b9 m8 d+ Z! L$ M7 Q  ]; m
* p* i0 Y( K- K( |1、进入到初始化备份的那个新空 SVN 库中去,也就是上面第4个脚本执行的第二条结果。
1 C' l- n& M! o/ }7 ~* R2、copy uuid 到原始项目的 /db/目录下去,意思就是新初始化后的空 SVN  项目新生成的 uuid 文件,要替换到原始项目下 /db/ 目录下的 uuid 文件。  J7 d* F7 J* W. M" @) X% x
3、copy
revprops/0/0  到原始项目的 /db/revprops/0/ 目录下去。也就是要替换原始项目下的 /db/revprops/0/0  标红 0 文件。6 g+ _3 W/ \& L: D; u7 E
4、两个文件都替换好之后,就好执行
svnsync 同步操作了,注意版本号: 从 "0" 版本开始 ~ 最新版本 "117"。
. n- I9 k. |' f. p& k( {+ L
5、所有脚本都正常顺利的执行完成之后,两地的SVN库也就都同步了。
( ]! h' d$ O& o
( o- L' i; l/ a2 ?- Y3 f' `

  L# v; a3 Y8 Q  q2 A*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/9 K4 l( R  V% K: n) m0 P

, u8 M! ]8 f4 U

0 n5 v6 q- c' }; @1 E0 H

本帖子中包含更多资源

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

x
 楼主| 发表于 2017-10-31 10:07:13 | 显示全部楼层
异地远程同步迁移 SVN 库就算是整理完成了,脚本比较简单。' H9 }9 F. I$ @" y6 J! ^

( P' z" |" w1 I& J" v, [大神们可以优化脚本,实现全自动执行。( `/ G/ s1 D' B
! L) C# j) ]+ X& i& B# v
原理效果大致也就这思路
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

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

GMT+8, 2019-2-19 20:02 , Processed in 0.063422 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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