SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2904|回复: 1

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

[复制链接]
发表于 2017-10-26 18:09:34 | 显示全部楼层 |阅读模式
本帖最后由 yjg021 于 2017-10-31 10:04 编辑
* E- w( e9 `7 @% }& x
" }4 n% E; p7 T) x# w  W异地远程迁移同步SVN库,操作模式大概如下图所示。7 J3 D( O  W. S2 p% Y& |. P
) ^0 J$ b2 X' }) H

6 o" x* D! Z1 B7 x
& o+ q; B; T& b5 \8 {( L 按如下 shell 脚本执行顺序一次操作即可。. F3 e. ?1 V( j! p

# w8 Z. |% u  x/ n. S1、$ cat svnlist.xml
& W# \& B2 d- c) s! ]( ~
3 }8 M" w5 n/ ~& O. [Android7.1.1_SHHAI' @/ e9 l: Z2 d1 W: R
Android7.1.1_BJMO0 j9 S$ V) c; o
/ O$ u  X7 B3 [% U; \, ?
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/7 R8 d# s: {5 A$ r  o

: m' J, k" N1 Z' i$ q各SVN项目库的名字,全部都写到这个xml文件中。
5 G! c! f8 E; R. b
4 E0 _& L2 g" {. W*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
( H) {( C" G. L! J# L; j: ~
& j  x: [) O; |8 @2 h; T/ K$ Y: |  k* R# {, g- ~* f9 m8 Z
2、$ cat bak_project.sh
- T+ t; c1 w8 Q4 v' j* e, B3 x#/bin/bash
0 z  c( `5 s/ T$ Y3 t% Y8 ]  n$ }6 `; d, I
for i in $(cat svnlist.xml | tr " " "\?")
! Z6 x6 X- d1 C2 G  h6 Kdo) Q- I0 c6 i4 f

! H4 o6 M7 v! y1 K: a& pmv /svn/svnrepos/svnRepository/$i /svn/svnrepos/svnRepository/$i_123
5 d$ q) ]% s2 L  S5 D$ U2 s' n. B
done( ~+ S! u' Y: p6 }! R  u1 D

$ }; n# C9 }& y6 X$ z/ u3 H) Spwd( p# d% q+ \; v5 e

' }2 m/ A" c- Q1 [! n*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/' N  j- e; T" \% i; \6 ~: f

% Q* r, C  R8 }. i2 l6 p0 A: Q* a上面这个脚本意思是,把原项目先备份重命名一下。
# X% B9 S0 b/ i7 V4 y' D, y( h, h$ D* Q& D' L* G" w- t. v
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
- g% J; m. O9 {' m, N& d, J, X8 v# j6 `: I8 J& O# t
3、$ cat createSvn.sh 7 R. ^  i; ~* G
#/bin/bash$ p" f. Y5 I, q
# l2 i( y8 M$ m0 b9 ^2 K
for i in $(cat svnlist.xml | tr " " "\?")
! g! i  Y- x& j/ i9 Rdo! q0 H4 c. g- C8 @

! ^7 A1 m' E# n5 |& f5 {4 k& Bsvnadmin create /svn/svnrepos/svnRepository/$i8 G( D" t) m1 z- M* Q( C- c

, B6 c% g7 |% x5 idone6 P5 \- L$ g& I4 F

3 c* `0 L' [5 @: s5 C3 ~chmod -R g+rws /svn/svnrepos/svnRepository/$i0 @9 Z! v8 E6 S$ o$ ~: m
chmod -R 777 /svn/svnrepos/svnRepository/$i
& ?. f5 F2 M: `/ m  M$ z, u8 ^) f" m' t
sleep 2, I( Y0 H3 Q' h8 d
8 K( t* F" l  z  F
cp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/$i/hooks/
9 e, S% T5 c5 }/ I$ z# R
% f2 P; X3 }$ ]2 ?pwd
$ p; U& a, O; G" A
/ e. r0 C/ O6 G5 ?$ q; q*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
! ^+ z' T- }9 ^9 }1 h4 h5 P( b8 ^- d' l8 X5 t( ]/ }# R1 B
上面这个脚本意思是:( h# p' U! o4 _- k8 H) v9 H
1、先创建一个原项目空的SVN库。
2 o$ c' Y/ h: _* S- d& [  u2、然后给项目赋予读写权限
, m- i! [- h0 [  C+ g3、最后是把修改过的 pre-revprop-change 文件,copy 到新建的 空SVN库的 /hooks/ 目录下。' h( L3 M; K# i5 J: H! _$ v) X3 w8 h3 M
: E0 _% C$ }- R3 u+ h) \9 f
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
, [$ K' T$ K' Z% R- @) r4 T! S  G1 _# P" D$ s$ ]! R/ z
4、$ cat  svninit.sh ' d9 E0 K" R7 h' D
#/bin/bash, n0 ^( I9 s- C7 Z1 H

' ]3 H9 I& Y2 d0 E0 P3 \' w3 \cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks, r! t; U5 L" U2 c

, a) g1 P" f/ ~  H" e+ S% r" bsvnsync init http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI  http://120.239.101.99/svn/Android7.1.1_SHHAI! a6 F7 r* a6 B+ {' T

* u5 C- ]* ]1 c  J* msleep 3& t2 |$ P$ _& b. e9 l4 E5 T
pwd5 N# P9 R1 z/ k' _- D9 @

) n; d1 y* c/ ?$ d* b$ ]cd /svn/svnrepos/svnRepository
2 |8 z, D. m; t& ?3 F" W' smv Android7.1.1_SHHAI  Android7.1.1_SHHAI_bak1 b9 ]" T& `" M1 |3 Y* j( ?
9 n, S) F' k5 l$ |2 M( C& m1 z
sleep 39 a: k1 f) V( x$ b" h, Z  X' L% A3 `! ^
pwd$ c2 f1 |+ O6 x4 c7 u0 e) q

- @% S. `$ g$ Wcp -rf Android7.1.1_SHHAI_123  Android7.1.1_SHHAI' u7 S1 }. h6 q' a- C

1 Z! n( }8 K+ D# V) R% z* O6 ssleep 14 j1 p0 X/ t6 O$ z
pwd& Q9 v  W5 P9 c5 S) Q$ D

$ x$ O3 Y" e- Y8 n: y3 Xcp /svn/sh/pre-revprop-change /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/hooks/
% [8 e2 D+ \* j9 o. }9 n
5 a/ S, d! ^' d% {3 e  xpwd, Y8 L: x1 h9 S& }1 R: [
  K2 S+ q; c2 N9 f7 O
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
8 O* G- I7 e0 @- V
6 P7 o/ z( f0 `8 c上面这个脚本的意思是:; g) e( b& }. ?% {, F
1、在新建的空 SVN 库中,执行初始化操作。; e, E0 W/ w4 U  o
2、然后再接着把这个新建初始化的空 SVN 库移走或重命名。 6 V/ q7 r1 ]* Z+ k. {; P, q0 K
3、在 copy 第二个脚本里执行过的,备份重命名原始项目。意思就是把新建的初始化的SVN库移走,把原始项目在还原回来。
; Y, x6 I+ e+ C4、最后也是要把修改过的 pre-revprop-change 文件,copy 到还原回来后的项目库 /hooks/ 目录下。
  Z4 [2 T9 r" `$ K% N; b: @4 g- {/ r& f0 o% F7 E4 _1 y

( Z. H* Z8 i7 C) |*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
. e+ z- @  v& k/ d" ?* s" ?0 Z  }6 v4 x0 k- R. V, P9 s) `
5、$ cat  copy_uuid_sync.sh
7 d9 a. [5 t: o) b3 I# S#/bin/bash
6 A2 Y9 E& f3 Z/ V9 t3 C7 a7 [/ f4 }1 m: i' e+ }' B
cd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI_bak/db/
" W# y3 f6 }% \cp uuid /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/6 B7 w2 G9 G2 H6 O
! Y8 p/ I$ t( r. L4 ?
sleep 25 f% s9 q$ I8 W# t: Z% `# H# l
pwd& O! F. j+ n, m9 t' y

2 k7 a  O: `# U' d+ kcp revprops/0/0  /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/revprops/0/, X" }5 ^* }4 G: ^

. j0 ~4 A9 r2 K3 ssleep 2
/ E& b% j; T% y% l4 S) N& ipwd/ Z! i9 k$ r5 i) [

$ z4 ~  f# n5 V! Pcd /svn/svnrepos/svnRepository/Android7.1.1_SHHAI/db/
/ v2 v3 A6 n" @" W+ A0 h
+ l( D$ s9 Y1 w7 w  {svn propset --revprop -r0 svn:sync-last-merged-rev 117 http://110.139.212.88:1010/svn_gasyb/Android7.1.1_SHHAI, I& c5 U' J% s2 t, g

  u4 k$ x: k$ n4 T9 p8 c" Zsleep 16 q9 e* X+ K& Q/ K9 a
7 W% w. W; P% a, k7 `
svnsync sync --non-interactive  http://110.139.212.88:1010/svnRepository/Android7.1.1_SHHAI --username ab#cd@ef --password ******# I( I  }" d5 `/ O% R
, E- c) e9 ]2 m' k- E4 _
pwd- U7 D; p$ G8 L- I6 l( V  ?; H. @
) `  j9 g+ g& x$ H9 x
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
8 Y; y: k  a; j2 E
5 {! p0 u. I6 J2 p6 }; X上面这脚本意思是:
+ {  `& V) _/ A; i; z. |9 V: W9 _+ _# X' m; m
1、进入到初始化备份的那个新空 SVN 库中去,也就是上面第4个脚本执行的第二条结果。3 E$ y$ F, C. s% P5 H6 H; F0 Q4 ~/ X
2、copy uuid 到原始项目的 /db/目录下去,意思就是新初始化后的空 SVN  项目新生成的 uuid 文件,要替换到原始项目下 /db/ 目录下的 uuid 文件。
; ?1 l: i1 Z3 E( G3、copy
revprops/0/0  到原始项目的 /db/revprops/0/ 目录下去。也就是要替换原始项目下的 /db/revprops/0/0  标红 0 文件。: A- ?, ^" m0 s  [
4、两个文件都替换好之后,就好执行
svnsync 同步操作了,注意版本号: 从 "0" 版本开始 ~ 最新版本 "117"。  u# S2 A8 ^2 o4 l
5、所有脚本都正常顺利的执行完成之后,两地的SVN库也就都同步了。
& w( `' W/ W) B+ R: \+ d' {2 E4 r" m

4 w: `, j" B0 R# j& J7 V1 d*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/% |! H4 J! `0 c- o8 l% g8 l
+ B: D  n* J- M3 {1 H+ \% K/ }
! J8 w4 U# z" d7 {

本帖子中包含更多资源

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

x
 楼主| 发表于 2017-10-31 10:07:13 | 显示全部楼层
异地远程同步迁移 SVN 库就算是整理完成了,脚本比较简单。
8 S0 f6 z3 S; i5 T- o. J
, E# m/ ^$ d; t, n4 E/ Z' b大神们可以优化脚本,实现全自动执行。
; _9 V, f/ i# ?" R* A( C3 ~
2 F& N! @% y& L原理效果大致也就这思路
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

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

GMT+8, 2019-4-24 15:03 , Processed in 0.063140 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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