svn版本库的拆分及迁移子目录等

需求
  • 库的改名
  • 库A导入到库B
  • 库A的子目录导入到库B
  • 库A的子目录导入到库B的子目录
svnadmin dump
  • 此工具只运行在服务器上
  • 查看最新版本
svnlook youngest /var/svn/A# X+ J. V# s* c% Y& c
1 P& p5 z% k# E: f. p
  • 导出整个库的所有版本
svnadmin dump /var/svn/A > A-dumpfile

  • 导出指定的23版本( N* a% [7 Z" ~" V5 l% e
svnadmin dump /var/svn/A -r 23 > rev-23.dumpfile

  • 导出指定的100到200版本
svnadmin dump /var/svn/A -r 100:200 > revs-100-200.dumpfile
8 x0 a, G( I& M# k! j% Q! i
  • 用增量的方式导出5 |3 X! U9 f1 @  Q
svnadmin dump /var/svn/A -r 0:1000 > dumpfile1
: }$ ~7 o. S, }
svnadmin dump /var/svn/A -r 1001:2000 --incremental > dumpfile2
. G$ A" M0 `& v) c( q  o, x" L) T3 _
svnadmin dump /var/svn/A -r 2001:3000 --incremental > dumpfile3: d2 C( |* O+ U; p9 j( v

svnadmin load
  • 导入到新库中
svnadmin load /var/svn/B < A-dumpfile
- `# ?, m8 l8 K
  • 导出库的同时直接导入到另外库中
svnadmin create /var/svn/Bsvnadmin dump /var/svn/B | svnadmin load /var/svn/A- A3 i$ G6 m1 l4 P7 w

  • 导入采用--incremental方式导出的dump文件
svnadmin load /var/svn/B < dumpfile1
: M7 G9 J1 d5 y: \1 w2 C
svnadmin load /var/svn/B < dumpfile2

svnadmin load /var/svn/B < dumpfile3
  L0 K) m1 c) F( w" y6 {" V* c
  • 导入到指定的目录下,支持多级目录,如trunk/calc
svnadmin load /var/svn/B --parent-dir calc < calc-dumpfile

svnadminfilter
  • 选取指定的路径,经测试只支持一级目录,不支持子目录,并且把子目录移动到一级目录后,此操作也无效
svndumpfilter include calc < repos-dumpfile > calc-dumpfile
5 g: ~0 E% Q( C, z. t, x
svndumpfilter include calendar < repos-dumpfile > cal-dumpfile

svndumpfilter include spreadsheet < repos-dumpfile > ss-dumpfile: ^8 U  G. U, @5 g" }

  • 如果采用多级目录过滤会出错:svndumpfilter: Invalid copy source path '/UploadDownload/trunk/UploadDownDemo'
  • 如果是对子目录进行过滤,导入库后会显示如下图所示:无实际文件导入
  • 有用的参数
--drop-empty-revs#根本不生成空版本—忽略它们。

--renumber-revs#如果空修订版本被剔除(通过使用--drop-empty-revs选项),依次修改其它修订版本的编号,确保编号序列是连续的。

svnadmin hotcopy
  • 此工具可以用于备份版本库,也可以用于迁移版本库
rsvndump 介绍
  • 此工具不是svn的标准命令,是第三方工具
  • 此工具不需要有服务器的管理权限就可以操作,支持子目录的导出,强大,灵活$ V8 b( Z& S" @7 g7 l
帮助 下载 安装
tar zxvf rsvndump-0.5.5.tar.gz
5 d5 R2 @! N+ r# l8 M
cd rsvndump-0.5.5

./configrue
* {6 j- E; y- C. b) J
make
: ?$ C; u+ X6 n% N( h" d, w
make install
& j3 g& f" N' l7 d9 S" D
#配置时会报错,处理如下#APR could not be located. Please use the --with-apr option

root@hz-rt:~/rsvndump-0.5.5

$ apt-get install libapr1-devel或者yum install httpd-devel -y #centos#configure: error: Subversion could not be located. Please use the --with-svn option.

root@hz-rt:~/rsvndump-0.5.5

$ apt-get install subversion

root@hz-rt:~/rsvndump-0.5.5

$ apt-get install libsvn-dev#或者从源码上下载编译安装,从http://apr.apache.org/下载APR(如Apache Portable Runtime 1.3.3)及APR-util(apr-util-1.3.4.tar.gz)

使用
  • 支持http方式,并不仅仅是本地文件方式,而且支持子目录导出; ]# F- w% k4 Q6 g  J
root@hz-rt:~/temp$ rsvndump http://hz-svn01/svn/c928/trunk/sourcecode/autobuild2.0 >abs2.0
' C" B5 k/ _8 b, _& E  {8 q" D( b
Authentication realm: <http://hz-svn01:80> Subversion repositoryPassword for 'batuser':-----------------------------------------------------------------------ATTENTION!  Your password for authentication realm:<http://hz-svn01:80> ArcSoft Subversion repositorycan only be stored to disk unencrypted!  You are advised to configureyour system so that Subversion can store passwords encrypted, ifpossible.  See the documentation for details.You can avoid future appearances of this warning by setting the valueof the 'store-plaintext-passwords' option to either 'yes' or 'noin'(null)'.-----------------------------------------------------------------------Store password unencrypted (yes/no)? no* Dumped revision 1325 (local 1).* Dumped revision 1328 (local 2).* Dumped revision 1335 (local 3).* Dumped revision 1346 (local 4).* Dumped revision 1347 (local 5).* Dumped revision 1349 (local 6).* Dumped revision 1350 (local 7).* Dumped revision 1848 (local 8).) M3 @# p% K. X0 k- f# O
( p9 b3 U- U3 C" Q4 }: E# n
  • 导入的话,请参看svnadmin load部分即可
  • 导出的文件是svnadmin dump相同的格式。

导出如果带前缀,如:-prefix MMF_Android,会出现如下的情况:如果需要目录请需要这样设置:-prefix MMF_Android/

  • 前缀不是目录名,而是被增加到原目录名的前面,可能并不是你需要的情况:- S) N+ d2 i: h1 w

如果导入指定目录的指定版本 -r X:Y ,这个X不能从1开始,需要从创建这个目录的版本号开始,如果从1开始会出错。


SVN1.7中带了svnrdump工具
  • 与rsvndump工具是类似的,支持http等远程方式$ }7 E+ f$ y! T# }# k
D:\csvn\bin>svnrdump help
% q3 A  b2 l4 v# u
dumpdump: usage: svnrdump dump URL [-r LOWER[:UPPER]]Dump revisions LOWER to UPPER of repository at remote URL to stdoutin a 'dumpfile' portable format.  If only LOWER is given, dump thatone revision.Valid options:-r [--revision] ARG      : specify revision number ARG (or X:Y range)-q [--quiet]             : no progress (only errors) to stderr--incremental            : dump incrementally--config-dir ARG         : read user configuration files from directory ARG--config-option ARG      : set user configuration option in the format:FILE:SECTION:OPTION=[VALUE]For example:servers:global:http-library=serf--username ARG           : specify a username ARG--password ARG           : specify a password ARG--no-auth-cache          : do not cache authentication tokens--trust-server-cert      : accept SSL server certificates from unknowncertificate authorities without prompting (but onlywith '--non-interactive')--non-interactive        : do no interactive prompting


采用svnrdump load方式导入
svnsync: E175002: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existentsvnsync: E175008: At least one property change failed; repository is unchangedsvnsync: E175002: Error setting property 'sync-lock':Repository has not been enabled to accept revision propchanges;ask the administrator to create a pre-revprop-change hook

解决: hooks目录下建立一个pre-revprop-change文件
#!/bin/bash
; h- g' Z* z) I7 _! i
exit 0;/ Y" u; h' V. P( F1 D4 W5 k; L6 D
) [. S& W/ {  V4 I$ W" x/ z) e

导入后有一个版本号的问题,原库的reversion为20000的话,新库中的版本号至少也要增加20000?采用svnadmin与svnrdump方式都存在这个问题。


#--parent-dir支持多级目录[root@hz-svn01 svndump]# /opt/CollabNet_Subversion/bin/svnadmin load /var/svn/A --parent-dir MusicPlayer/Common_SDK < i .dump
' h# j1 G- i: s9 N* L- a8 F
实验后最好的方案 4 J7 I: V6 D* M; Q2 j
  • rsvndump 第三方工具,svnadmin load 利用原生工具,不会出现多余的版本号 #这种方式也不是很好的方式,因为如果迁移的目录被新建及移动过,就会丢失历史记录。
  • 如果目录被移动过,迁移时会丢失一些历史记录。
  • 采用rsvndump导出的文件,不能采用svnrdump的http方式导入,中间会报错。

  • 本来想采用svndumpfilter include --drop-empty-revs renumber-revs去过滤空的版本,可惜失败了。
  • 采用svnrdump方式导出的版本,竟然用svndumpfilter不能去过滤,要用先导入,再用svnadmin dump方式导出才能使用。
  • D:\>svnrdump dump http://hz-svn01/svn/A/photoshow/B >B.dump 这个命令的使用,不需要有整个库的权限,只需要有子目录的权限即可。
, ?& I" s6 P) u) f" x, R
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值