SVN库迁移整理方法总结

有时候需要从一台机器迁移svn存储库到另外一台机器,如果数据量非常大的话,没有好的方法是很不方便的,其实迁移svn跟迁移mysql差不多,也有导出导入的方案

以下是subversion官方推荐的备份方式。
关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd、svnserve 或本地用户在直接访问)。
备份svn存储库
#压缩备份
svnadmin dump /data/svn/repository | gzip > /tmp/repository-backup.gz
#不压缩备份
svnadmin dump /data/svn/repository > /tmp/repository-backup.svn

恢复svn存储库
#建立新的svn存储库
svnadmin create /home/workhome/svn/newrepository
#确认成功与否
ls -l /home/workhome/svn/newrepository
#导入存储库数据
svnadmin load /home/workhome/svn/newrepository < /tmp/repository-backup.svn


SVN数据库迁移方法一

称之为SVN全库操作,或称SVN全局备份并恢复,版本库数据的移植:svnadmin dump、svnadmin load
导出:
$svnadmin dump repos > dumpfile //将指定的版本库导出成文件dumpfile
新建:
$svnadmin create newrepos
导入:
$svnadmin load newrepos < dumpfile

 

 SVN数据库迁移方法二
增量备份或批次备份,批次恢复,特定reversion导出:
$svnadmin dump repos –r 23 >rev-23.dumpfile //将version23导出
$svnadmin dump repos –r 100:200 >rev-100-200.dumpfile //将version100~200导出
批次导出:对比较大的库可以批次导出,便于备份
$svnadmin dump repos –r 0:1000 >0-1000.dumpfile
$svnadmin dump repos –r 1001:2000 --incremental >1001-2000.dumpfile
$svnadmin dump repos –r 2001:3000 --incremental >2001:3000.dumpfile
批次导入,将这几个备份文件装载到一个新的版本库中
$svnadmin load newrepos < 0-1000.dumpfile
$svnadmin load newrepos < 1001-2000.dumpfile
$svnadmin load newrepos < 2001:3000.dumpfile


SVN数据库迁移方法三
导出后,在导入时对库做分库整理或其它整理操作过滤版本库历史:
假设有一个包含三个项目的版本库: calc,calendar,和 spreadsheet。它们在版本库中的布局如下:
/
 calc/
 trunk/
 branches/
 tags/
 calendar/
 trunk/
 branches/
 tags/
 spreadsheet/
 trunk/
 branches/
 tags/
现在要把这三个项目转移到三个独立的版本库中。首先,转储整个版本库:
$ svnadmin dump /path/to/repos > repos-dumpfile 
* Dumped revision 0.
 * Dumped revision 1. 
 * Dumped revision 2. 
* Dumped revision 3. 
  然后,将转储文件三次送入过滤器,每次仅保留一个顶级目录,就可以得到三个转储文件:
$ cat repos-dumpfile | svndumpfilter include calc > calc-dumpfile 
$ cat repos-dumpfile | svndumpfilter include calendar > cal-dumpfile 
$ cat repos-dumpfile | svndumpfilter include spreadsheet > ss-dumpfile 
现在你必须要作出一个决定了。这三个转储文件中,每个都可以用来创建一个可用的版本库,不过它们保留了原版本库的精确路径结构。也就是说,虽然项目calc现在独占了一个版本库,但版本库中还保留着名为calc的顶级目录。如果希望trunk、tags和branches这三个目录直接位于版本库的根路径下,你可能需要编辑转储文件,调整Node-path和Copyfrom-path头参数,将路径calc/删除。同时,你还要删除转储数据中创建calc目录的部分。一般来说,就是如下的一些内容:
 Node-path: calc 
 Node-action: add 
 Node-kind: dir 
 Content-length: 0
 警告: 
如果你打算通过手工编辑转储文件来移除一个顶级目录,注意不要让你的编辑器将换行符转换为本地格式(比如将\r\n转换为\n)。否则文件的内容就与所需的格式不相符,这个转储文件也就失效了。 
剩下的工作就是创建三个新的版本库,然后将三个转储文件分别导入:
$ svnadmin create calc; svnadmin load calc < calc-dumpfile 
$ svnadmin create calendar; svnadmin load calendar < cal-dumpfile 
$ svnadmin create spreadsheet; svnadmin load spreadsheet < ss-dumpfile
svndumpfilter的两个子命令都可以通过选项设定如何处理“空”修订版本。如果某个指定的修订版本仅包含路径的更改,过滤器就会将它删除,因为当前为空的修订版本通常是无用的甚至是让人讨厌的。为了让用户有选择的处理这些修订版本,svndumpfilter提供了以下命令行选项:
--drop-empty-revs
不生成任何空修订版本,忽略它们。
--renumber-revs
如果空修订版本被剔除(通过使用--drop-empty-revs选项),依次修改其它修订版本的编号,确保编号序列是连续的。
--preserve-revprops
如果空修订版本被保留,保持这些空修订版本的属性(日志信息,作者,日期,自定义属性,等等)。如果不设定这个选项,空修订版本将仅保留初始时间戳,以及一个自动生成的日志信息,表明此修订版本由svndumpfilter处理过。
尽管svndumpfilter十分有用,能节省大量的时间,但它却是把不折不扣的双刃剑。首先,这个工具对路径语义极为敏感。仔细检查转储文件中的路径是不是以斜线开头。也许Node-path和Copyfrom-path这两个头参数对你有些帮助。
Node-path: spreadsheet/Makefile 
如果这些路径以斜线开头,那么你传递给svndumpfilter include和svndumpfilter exclude的路径也必须以斜线开头(反之亦然)。如果因为某些原因转储文件中的路径没有统一使用或不使用斜线开头,也许需要修正这些路径,统一使用斜线开头或不使用斜线开头。
此外,复制操作生成的路径也会带来麻烦。Subversion支持在版本库中进行复制操作,也就是复制一个存在的路径,生成一个新的路径。问题是,svndumpfilter保留的某个文件或目录可能是由某个svndumpfilter排除的文件或目录复制而来的。也就是说,为了确保转储数据的完整性,svndumpfilter需要切断这些复制自被排除路径的文件与源文件的关系,还要将这些文件的内容以新建的方式添加到转储数据中。但是由于Subversion版本库转储文件格式中仅包含了修订版本的更改信息,因此源文件的内容基本上无法获得。如果你不能确定版本库中是否存在类似的情况,最好重新考虑一下到底保留/排除哪些路径。
备份环境注意点:
 1、确保没有其他进程访问版本库,关闭apache、svnserve服务
 2、成为版本库的管理员,如果以其他身份还原版本库,可能会改变版本库文件的访问权限,导致在恢复后依旧无法访问
 3、svnadmin recover /path/to/repos
 4、重新启动服务进程
SVN数据库整理方法
不经过dump,load操作,实现SVN数据库整理操作,先设计好调整后的目录, 然后打开版本库, 选中要调整或转移的文件(文件夹)-->右键拖住,不要松手-->然后将要转移的文件(文件夹)拖至目标文件夹-->松手-->选择move items to here-->完成

每经过这样的调整,大家都会担心历史记录是否还会存在, TortoiseSVN在默认情况下, 是不会显示出来的,需要将一个选项去除.

如此可实现基于库的调整操作,但事事不是尽如人意的,这样的一次操作下来,revision会增长好多。
我的想法是:
停止当前SVN服务,将当前的SVN库直接进行整理,就像整理存储在电脑中的文件夹一样,然后开启SVN服务,即时显示调整后的效果,哈哈..是不是有点异想天开,其实我也觉得这是不太可能的,除非使用工具访问,否则SVN库不是显示可见的,希望以后啥配置管理工具可以让管理员有这样的权限.

 
实验:
一、在迁出服务器执行:
svn@Africa:~/csvn/bin> csvn stop
Stopping CSVN Console...
Waiting for CSVN Console to exit...
Waiting for CSVN Console to exit...
Stopped CSVN Console.
svn@Africa:~/csvn/bin> csvn-httpd stop
Stopping Subversion Edge Apache Server:                                                                                   done
svn@Africa:~/csvn/data/repositories> svnadmin dump /home/svn/csvn/data/repositories/camp | gzip >camp_dumpfile_20130610.gz
......
* Dumped revision 4495.
* Dumped revision 4496.
svn@Africa:~/csvn/data/repositories> ls
camp  camp_dumpfile_20130610.gz  cpst  csvn  csvn-httpd  docm

二、在迁入服务器执行:
取迁出服务器上导出的文件camp_dumpfile_20130610.gz;
csvn@campostdev:~/data/repositories> svnadmin create /home/csvn/data/repositories/newcamp
csvn@campostdev:~/data/repositories> gzip -d camp_dumpfile_20130610.gz
csvn@campostdev:~/data/repositories> svnadmin load /home/csvn/data/repositories/newcamp < camp_dumpfile_20130610 
......
<<< Started new transaction, based on original revision 4495
     * editing path : trunk/site/campost/src/dsp/frmDomItemMod.mcpp ... done.
     * editing path : trunk/site/campost/src/dsp/frmIntItemMod.mcpp ... done.
------- Committed revision 4495 >>>
<<< Started new transaction, based on original revision 4496
     * editing path : trunk/site/campost/src/dsp/frmDspInterCloseDisp.mcpp ... done.
------- Committed revision 4496 >>>
csvn@campostdev:~/bin> csvn start
Starting CSVN Console......
CSVN Console started
Waiting for application to initialize (this may take a minute)...............................................
CSVN Console is ready at http://localhost:3343/csvn
csvn@campostdev:~/bin> csvn-httpd start
Starting Subversion Edge Apache Server:           

 

本文转载自http://blog.chinaunix.net/uid-354915-id-3766906.html

转载于:https://www.cnblogs.com/fjping0606/p/4608290.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java命令行 引用jar包_java命令行引用jar包

一个简单的测试程序&#xff1a;import java.sql.*;/*** Created by N3verL4nd on 2017/4/17.*/public class JdbcDemo{public static void main(String[] args) {Connection conn;Statement stmt;ResultSet rs;String url "jdbc:mysql://localhost:3306/weibo?" &…

Linux之文件权限

现在查看一个文件的信息 rootubuntu:/home/songl/test# ls -l a.out -rwxrwxr-x 1 songl songl 8565 May 5 07:45 a.out - rwx rwx r-x 1 songl songl 8565 M…

java自定义标签 实例_Java自定义标签用法实例分析

在Java开发中&#xff0c;我们都要标记库中进行标注&#xff0c;而我们需要对自己的标记进行定制&#xff0c;今天爱站技术频道小编就和大家分享Java自定义标签用法实例分析&#xff0c;大家需要熟练掌握这些知识哦。简单例子实现一个标签分为两步&#xff1a;(1)继承SimpleTag…

bootstrap API地址

http://wenzhixin.net.cn/p/bootstrap-table/docs/examples.html#pagination-table转载于:https://www.cnblogs.com/jimmy88/p/4618147.html

java oralce merge_Oracle数据库merge into的使用,存在则更新,不存在则插入

1、在实际应用场景中&#xff0c;我们会用到&#xff1a;如果这条数据在表中&#xff0c;就更新数据&#xff1b;如果不存在这条数据&#xff0c;就插入这条数据。在oracle中&#xff0c;可以使用merge into实现&#xff0c;在mysql中可以使用ON DUPLICATE KEY UPDATE&#xff…

DataTable操作

DataTable操作 一 复制DataTable中符合条件的DataRow到新的DataTable中 One&#xff1a; DataTable TableTemp new DataTable();//临时table DataTable tableAd new Web.DAL.FreeBase().TranSQLGetTable("select a.ClassName,b.ParentId,b.Name,b.Pic,b.Url,b.Sorts fro…

java观察者模式_Java 观察者模式

网上商店中的商品在名称、价格发生变化时&#xff0c;必须自动通知会员&#xff0c;Java的API为我们提供了Observer接口和Observable类来实现所谓观察者模式。Observable(可观察者)类允许在自身发生改变时&#xff0c;通知其它对象(实现接口Observer&#xff0c;观察者)。下面是…

(剑指Offer)面试题5:从尾到头打印链表

题目&#xff1a; 输入一个链表的头结点&#xff0c;从尾到头反过来打印每个结点的值。 链表结点定义&#xff1a; struct ListNode{int value;ListNode* pNext; }; 思路&#xff1a; 1、改变链表结构的话&#xff0c;先反转链表&#xff0c;然后从头到尾打印每个结点的值。&am…

java解析json数组对象_JAVA中快速解析JSON对象里包含的JSON数组

例如现在有这样一个JsonString Value {"data":[{"school_name":"西北农林科技大学","school_id":"8"},{"school_name":"西北大学","school_id":"6"},{"school_name":&…

ACM water

1000 纯属适应题 1003 做的时候花了很久&#xff0c;现在看好像也不难 1004 适应题&#xff0c;求下平均就行 1005 要读懂题就行 1007 逆序数&#xff0c;discuss方法 1046 全部暴搜一遍。。 1118 照抄2606没看题。。WA。。RE全占了 1207 貌似我的方法超级麻烦 1247 …

java水印图片_JAVA实用案例之图片水印开发

写在最前面上周零零碎碎花了一周的时间研究水印的开发&#xff0c;现在终于写了个入门级的Demo&#xff0c;做下笔记同时分享出来供大家参考。Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上搭建的&#xff0c;基于SpringSpringMVC。如果有错误还请大家指…

openoffice转换过程中遇到繁体字文档转换失败的问题

今天发现上线的文档转换功能中存在一个文档转换不成功&#xff0c;查看后台日志标志文档无法加载成功&#xff0c;提示日志如下&#xff1a; INFO: connected Jul 08, 2015 2:50:33 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection conn…

java导出excel文件名_怎么解决java导出excel时文件名乱码

怎么解决java导出excel时文件名乱码发布时间&#xff1a;2020-06-19 16:59:00来源&#xff1a;亿速云阅读&#xff1a;137作者&#xff1a;元一java解决导出Excel时文件名乱码的方法示例&#xff1a;String agent request.getHeader("USER-AGENT").toLowerCase();re…

error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”...

今日VS2012 C编译出现一堆错误: 1 1> 正在生成代码...2 1>Code.obj : error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12stdQAEXZ) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义3 1>Code.obj …