svn仓库迁移

以下是subversion官方推荐的备份方式。(以下方式全部保留commit日志)

svnserver:

ip:192.168.85.130

hostname:vm2.lansgg.com

data 目录 :/svn/csvn/data/repositories/


svn  仓库结构如下:每个部门一个大的目录,下面分别根据创建仓库,示例目录结构如下:

情景一、整目录(仓库)迁移

将dev整个迁移到另外一个svn服务器(如:vm1.lansgg.com)

因为是整个目录迁移,只需要将整个仓库目录rsync到 vm1.lansgg.com 上的仓库位置即可,单独进行权限配置,并且log也是完整保存。

情景二、仓库迁移

将dev目录下的web项目 ( dev/web )迁移到qa目录 (qa/web)下;

将        https://vm2.lansgg.com/svn/dev/web/   迁移到  https://vm2.lansgg.com/svn/qa/

1、先将整个目录备份:

[[email protected] ~]# svnadmin dump /svn/csvn/data/repositories/dev > dev.dump
* 已转存版本 0。
* 已转存版本 1。
* 已转存版本 2。
[[email protected] ~]#

2、我们需要将 dev 仓库中的 web 目录进行迁移,所以我们还需要进行过滤。如下:

[[email protected] ~]# svndumpfilter include web < dev.dump > dev.web.dump
包含的前缀: 
   ‘/web‘

版本 0 提交为 0。
版本 1 提交为 1。
版本 2 提交为 2。

丢弃 1 个节点: 
   ‘/wap‘

[[email protected] ~]#

3、将过滤出来的dump 文件进行还原

[[email protected] ~]# svnadmin load /svn/csvn/data/repositories/qa/ < dev.web.dump 
<<< 开始新的事务,基于原始版本 1
     * 正在增加路径: web ...完成。
     * 正在增加路径: web/t2.jpg ...完成。
     * 正在增加路径: web/t3.jpg ...完成。
     * 正在增加路径: web/t4.jpg ...完成。
     * 正在增加路径: web/新建 Microsoft Access 数据库.accdb ...完成。
     * 正在增加路径: web/新建 Microsoft Word 文档.docx ...完成。
     * 正在增加路径: web/新建文本文档.txt ...完成。

------- 提交后版本 1 >>>

<<< 开始新的事务,基于原始版本 2

------- 提交后版本 2 >>>

[[email protected] ~]#

还原完成,commit log也是存在的

情景三、将上面分离出来的 web 目录作为一个新的仓库进行恢复

将        https://vm2.lansgg.com/svn/dev/web/   迁移到  https://vm2.lansgg.com/svn/web

如果你想将  web  目录作为一个新的仓库进行恢复,
不过它保留了原版本库的精确路径结构。也就是说,虽然项目  web  现在独占了一个版本库,但版本库中还保留着名为 web  的顶级目录。如果希望trunk、tags和branches这三个目录直接位于版本库的根路径下,你可能需要编辑转储文件,调整Node-path和Copyfrom-path头参数,将路径 web/ 删除。同时,你还要删除转储数据中创建 web 目录的部分。一般来说,就是如下的一些内容:

(删掉如下内容,并且将所有文件前路径的web路径删掉。)

Node-path: web
 Node-action: add
 Node-kind: dir
 Content-length: 0
警告:
如果你打算通过手工编辑转储文件来移除一个顶级目录,注意不要让你的编辑器将换行符转换为本地格式(比如将\r\n转换为\n)。否则文件的内容就与所需的格式不相符,这个转储文件也就失效了。
剩下的工作就是创建1个新的版本库,然后将转储文件导入:

[[email protected] ~]# svnadmin create /svn/csvn/data/repositories/web
[[email protected] ~]# svnadmin load /svn/csvn/data/repositories/web/ < dev.web.dump 
<<< 开始新的事务,基于原始版本 1
     * 正在增加路径: /t2.jpg ...完成。
     * 正在增加路径: /t3.jpg ...完成。
     * 正在增加路径: /t4.jpg ...完成。
     * 正在增加路径: /新建 Microsoft Access 数据库.accdb ...完成。
     * 正在增加路径: /新建 Microsoft Word 文档.docx ...完成。
     * 正在增加路径: /新建文本文档.txt ...完成。

------- 提交后版本 1 >>>

<<< 开始新的事务,基于原始版本 2

------- 提交后版本 2 >>>

[[email protected] ~]#

情景四:

版本库的结构如下,有reposA(dev)和reposB (ops) 这两个版本库,然后红色的 reposA/dirB/code 就是需要移动的代码目录。本来打算用svn move来做的,后来发现因为是不同的版本库,所以这个想法被淘汰了。于是就要在server上想办法了,svnadmin有两个参数dump和load可以将版本库提取出来/加载进去,还有命令svndumpfilter可以过滤某些不想要/只想要的目录,这些就足以达到目的了。

版本库的结构如下,要将code移动到reposB/dirAA下边:

https://vm2.lansgg.com/svn/dev/web/scan/  的 scan 迁移到 https://vm2.lansgg.com/svn/ops/opsdev/ 下面

1、#将  dev  仓库备份到一个文件中

[[email protected] ~]# svnadmin dump /svn/csvn/data/repositories/dev/ > dev.dump
* 已转存版本 0。
* 已转存版本 1。
* 已转存版本 2。
* 已转存版本 3。
* 已转存版本 4。
[[email protected] ~]#

2、#将 dev 中的 scan 过滤出来,svndumpfilter include表示只保留制定的目录和文件

[[email protected] ~]# svndumpfilter include web/scan < dev.dump > dev.scan.dump
包含的前缀: 
   ‘/web/scan‘

版本 0 提交为 0。
版本 1 提交为 1。
版本 2 提交为 2。
版本 3 提交为 3。
版本 4 提交为 4。

丢弃 8 个节点: 
   ‘/wap‘
   ‘/web‘
   ‘/web/t2.jpg‘
   ‘/web/t3.jpg‘
   ‘/web/t4.jpg‘
   ‘/web/新建 Microsoft Access 数据库.accdb‘
   ‘/web/新建 Microsoft Word 文档.docx‘
   ‘/web/新建文本文档.txt‘

[[email protected] ~]#

3、#将 dumpfile 导入相应的目录,也就是ops/opsdev/,用parent-dir来指定

[[email protected] ~]# svnadmin load /svn/csvn/data/repositories/ops --parent-dir opsdev < dev.scan.dump 
<<< 开始新的事务,基于原始版本 1

------- 提交新版本 2 (从原始版本 1 装载) >>>

<<< 开始新的事务,基于原始版本 2

------- 提交新版本 3 (从原始版本 2 装载) >>>

<<< 开始新的事务,基于原始版本 3

------- 提交新版本 4 (从原始版本 3 装载) >>>

<<< 开始新的事务,基于原始版本 4
svnadmin: 没有找到文件: 事务“4-4”,路径 “opsdev/web/scan”
     * 正在增加路径: opsdev/web/scan ...[[email protected] ~]#

这个时候,需要给 ops 下的 opsdev 新建一个 web 文件夹

再次执行命令

[[email protected] ~]# svnadmin load /svn/csvn/data/repositories/ops --parent-dir opsdev < dev.scan.dump 
<<< 开始新的事务,基于原始版本 1

------- 提交新版本 6 (从原始版本 1 装载) >>>

<<< 开始新的事务,基于原始版本 2

------- 提交新版本 7 (从原始版本 2 装载) >>>

<<< 开始新的事务,基于原始版本 3

------- 提交新版本 8 (从原始版本 3 装载) >>>

<<< 开始新的事务,基于原始版本 4
     * 正在增加路径: opsdev/web/scan ...完成。
     * 正在增加路径: opsdev/web/scan/adxnotice.pdf ...完成。

------- 提交新版本 9 (从原始版本 4 装载) >>>

[[email protected] ~]#

4、然后,scan 文件夹现在在  https://vm2.lansgg.com/svn/ops/opsdev/web/scan/  这个路径,可以使用svn mv在客户端移动目录

[[email protected] ~]# svn mv --username=admin https://vm2.lansgg.com/svn/ops/opsdev/web/scan/ https://vm2.lansgg.com/svn/ops/opsdev/ -m "old to new"

提交后的版本为 10。
[[email protected] ~]#

这样就把reposA/dirB/code/ 转移到了 reposB/dirAA/code/,并且保留了相应的提交日志,目标达成。

情景五:

接上面的案例,如果想将scan下面的文件移动到ops下的doc目录呢?

一切的迁移只要你会修改dump文件就简单了。

比如如下:修改 上面过滤出来的 dev.scan.dump 文件

Node-path: web/scan
Node-action: add
Node-kind: dir
Prop-content-length: 10
Content-length: 10

PROPS-END

#######以上删掉

Node-path: web/scan/adxnotice.pdf       #web/scan   修改为 doc 即可。
Text-content-md5: ed04336a819674fb4f7492ac857ec2c6
Node-action: add
Text-content-sha1: eab72cc358e344dac94346186efd88eae2e39be2
Node-kind: file
Prop-content-length: 59
Text-content-length: 152699
Content-length: 152758

再次执行命令:

[[email protected] ~]# svnadmin load /svn/csvn/data/repositories/ops --parent-dir doc < dev.scan.dump 
<<< 开始新的事务,基于原始版本 1

------- 提交新版本 16 (从原始版本 1 装载) >>>

<<< 开始新的事务,基于原始版本 2

------- 提交新版本 17 (从原始版本 2 装载) >>>

<<< 开始新的事务,基于原始版本 3

------- 提交新版本 18 (从原始版本 3 装载) >>>

<<< 开始新的事务,基于原始版本 4
     * 正在增加路径: /doc/adxnotice.pdf ...完成。

------- 提交新版本 19 (从原始版本 4 装载) >>>

时间: 2024-10-25 05:12:08

svn仓库迁移的相关文章

SVN 仓库迁移

Step 1: Backup your old Repository svnadmin dump /path/to/repository > repo_name.svn_dump Step 2: Create the new Repository svnadmin create /path/to/repository Step 3: Import your old repository into the new one svnadmin load /path/to/repository < r

linux下迁移SVN仓库

文章出处: http://www.linuxidc.com/Linux/2013-05/84693p2.htm 迁移SVN仓库 最近服务器硬盘坏道导致频繁自动关机,所以需要迁移SVN到新的服务器去. 用以上同样的方法在新服务搭建好SVN,接着导出原svn仓库资料,再导入到新svn仓库即可. 1. 在老服务器进行导出操作:$ svnadmin dump 原先的repos的目录路径(/repository/directory) > dumpfile.svndump 2. 在新服务器将dumpfile

SVN仓库连同版本信息迁移新服务器的步骤

SVN仓库连同版本信息迁移新服务器的步骤 步骤一:导出(1)链接原服务器,找到SVN Server安装路径下的bin文件,并复制文件路径,如 C:\Program File\SVN Server\bin(2)打开cmd,定位到SVN Server安装路径,如:cd C:\Program File\SVN Server\bin (3)开始导出仓库及版本信息,(仓库路径如:E:\Repositories\Program,导出文件存储路径如:E:\Output\data.dump),输入: svnad

Windows下Svn服务器迁移至linux

Svn windows迁移至linux 需求:svn服务器从windows系统无缝迁移至linux系统中 实施: 一:准备工作 1,linux服务器一台 2,原svn-windows服务器安装代码及配置文件一份. 二:步骤 01:windows服务器操作 如图为windows svn 服务器图例 查找他的目录地址为:D:\Repositories 因为只有一个项目故进入此项目里找到需要的文件 注释:  conf  为用户账户及密码配置文件 Dav   为web认证文件 Db   为数据文件 Ho

visual svn server 迁移到新服务器

VisualSVN Server仓库迁移到winows(包含所有版本, 权限,用户信息) svn :visual SVN 3.5 操作系统:window 7 64 bit 安装下一步即可(很简单) 首先,VisualSVN Server Manager,包含两个路径,一个是安装路径,例如本机:C:\Program Files\VisualSVN Server,一个是库路径,例如本机:E:\Repositories,其中,Repositories中包括各项目文件及项目信息文件,重要的项目信息文件有

SVN项目迁移到Git上(并带有完整的提交记录)

公司需求:早期的一些项目使用的是SVN,现在想要更换为Git,需要代码迁移并且能在Git上看到之前在SVN中的项目的提交记录,公司没有使用gitlab,代码都push在公司的服务器上,用的是TortoiseGit来管理的. 第一步:公司服务器系统(centos6.8),安装git yum -y install git 第二步:创建git用户: useradd git #创建名称为git的用户 passwd git #git用户对应的密码也为git 第三步:创建git仓库: mkdir /home

SVN库迁移

上次库迁移,投机取巧,在源库上下载资源,然后上传到目标库,最后客户端更新url地址.这样迁移的库被组长一眼识破,因为新库中没有大家的操作日志. 这次吸取上次的教训,用dump和load完成SVN库迁移.整个过程分为5个步骤: 步骤1:创建源库的备份,在DOS下输入svnadmin dump D:\Repositories\屈文哲  > E:\屈文哲.rep "D:\Repositories\屈文哲"为源库的路径,"E:\屈文哲.rep"为备份库的输出路径 出现

windows操作系统重装后恢复svn仓库、tortoisesvn客户端信息、及权限信息的方法

1.SVN仓库信息的恢复(使用visual svn作为svn服务器的) 前提:必须要有原来的仓库文件 a.下载与原来同样版本的visual svn或者下载最新的visualsvn .因为你不知道原来的visualsvn的版本,所以安装旧的版本是无法恢复仓库信息的,提示错误 Expected FS format between '1' and '3'; found format '4'. visual svn下载地址:https://www.visualsvn.com/server/ b.安装完之

linux下创建svn仓库及用户

1 Linux下创建svn仓库 1.1 启动SVN服务 svnserve -d -r  /SVNRootDirectry 其中SVNRootDirectry是你的SVN 根目录,例如192.85.1.2上的是:/SVN.-d 表示以后太服务方式执行,-r就表示root 1.2 创建仓储 1.2.1 在SVN根目录下建立版本仓库 svnadmin create study 命令 :svnadmin create  msm 其中msm是版本仓库的名字,仓库建立好了以后会有出现一个仓库名字的文件夹,文