如何将仓库中的一个目录提升成到顶层,成为顶层的 Repositories? 我的结论是“无通解”!并且有风险!

例如: 将Repositories6 中 Repositories6/Rep6_Folder1 目录,提升一级成为一个顶层的 SVN: Rep6_New

网络上传播的方法,经过测试,大致的步骤是这样的:

用svnadmin dump命令导出文件,过滤数据:用 Svndumpfilter 命令过滤出需要的数据;然后直接编辑导出的文件!这一步是有风险的,除非数据库中数据,只有最简单的相互依赖关系。

网络上一般给出的编辑文件的方法是,将文件中的这一段文字删除掉:

Node-path: 将要去掉的目录名

Node-kind: dir

Node-action: add

Prop-content-length: 10

Content-length: 10

将文件中所有的:

Node-path: 将要去掉的目录名/

替换成

Node-path: 

将文件中所有的

Node-copyfrom-path: 将要去掉的目录名/

替换

Node-copyfrom-path: 

备注:如果导出的文件非常大,Windows下编辑超大文件工具,UltraEdit可能都不好用了,可以借用 Linux(Cygwin) 的 sed 或 ed。

然后,将编辑过的文件,倒入到新建的Repositories库中 (svnadmin load),成为顶层的库文件。以上就是网传的方法。

然而,Repositories库中数据可能有着更复杂的相互依赖关系,例如:

希望要提升的目录(也包括文件)可能曾经被修改过名字,甚至删除掉,又重建,你需要仔细查看log,才能知道来龙去脉,上面说的方法,不一定就那么简单,一蹴而就,一旦搞错了就会混乱不堪。

最可靠的方法,就是损失掉以往的版本信息,导出export干净的Head版本的数据,添加、并提交到(顶层)新库中。原来的下层目录,还是放在那里好了。

实验记录:

停止 SVN 服务

希望实现:

Repositories6/Rep6_Folder1 目录提升一级成为一个顶层的Repositories ,New_Rep6(新创建的一个空的Repositories),如图:

导出Repositories

svnadmin dump Repositories6 > DumpRep6

过滤导出文件

Svndumpfilter include Rep6_Folder1 < DumpRep6 > DumpFold1

会发现问题,导出的文件中,没有有用的数据:

E:\Repositories>Svndumpfilter include Rep6_Folder1 < DumpRep6 > DumpFold1
Including prefixes:
'/Rep6_Folder1'

Revision 0 committed as 0.
……
Revision 11 committed as 11.
Revision 12 committed as 12.
svndumpfilter: E200003: Invalid copy source path '/folder1'

原因是 Rep6_Folder1 是由 folder1 改名而来的(删除&重建)。看日志:

svndumpfilter 命令中使用包含 include 方式是不行的,因为Rep6_Folder1 原本的名字是 floder1(改名过)。这是版本控制的是根,被过滤掉了,Rep6_Folder1就没有根了。改用排除法 exclude  方式导出。

Svndumpfilter exclude Rep6_Folder2 < DumpRep6  > DumpFold1

Svndumpfilter exclude Rep6_Folder2 < DumpRep6 > DumpFold1
E:\Repositories>Svndumpfilter exclude Rep6_Folder2 < DumpRep6 > DumpFold1
Excluding prefixes:
'/Rep6_Folder2'

Revision 0 committed as 0.
……
Revision 23 committed as 23.

Dropped 7 nodes:
'/Rep6_Folder2'
'/Rep6_Folder2/0sizeFile.txt'
'/Rep6_Folder2/R6F2'
'/Rep6_Folder2/R6F2F1.txt'
'/Rep6_Folder2/R6F2F2.txt'
'/Rep6_Folder2/Rep6_Folder1'

似乎是OK了,但是还是有陷阱,如果同一级别的目录还有其它的目录,使用中又被删除掉了,也会一并的导入出来了。(示例中的确如此,见下文。仔细看日志,发现这类问题,可以对过滤出的文件,再次的过滤。建议,还是放弃这个方法吧!)

下一步编辑 DumpFold1 文件 。 将遇到一些棘手的问题。需要仔细查看日志。

然后导入到新建的 Repositories 中:

Svnadmin  load NEW_Rep6 < DumpFold1

导入编辑过后的文件,不一定会成功,导入可能时会遇到一些问题,需要继续编辑修改文件。

例如,可能遇到如下问题:

E:\Repositories>Svnadmin load NEW_Rep6 < DumpFold1
<<< Started new transaction, based on original revision 2
* editing path : Text_BigEndian.txt ...svnadmin: E200014: Checksum mismatch for '/Text_BigEndian.txt':
expected: 9c74ac67638e44e4c8073f608b0655a7
actual: 513155e38d1b941b086234ec289ed6da

这时,你还需要去修改编辑导出的文件,将revision2 的 Text-content-md5:后缀的数字, 修改成上面报告出来的 actual 值。

导入后的截图:

可以发现, 明显有一个问题 :多出了一个 Rep4_Folder目录。这是一个曾经被添加的目录,然后又删除掉了(有意预留的“炸弹”)。这是编辑处理文件不完善造成了遗留。需要仔细看日志,搞清楚数据之间的逻辑关系,也可以将编辑或过滤过的文件,用 Svndumpfilter 再次过滤一次或多次。

你还坚持使用这个方法吗?

导致上面效果,编辑文件方法附后:(细节部分,嫌烦忽略)

替换掉folder1/

替换掉Rep6_Folder1/

删除下面一段:

Revision-number: 1
Prop-content-length: 137
Content-length: 137

K 10
svn:author
V 16
VisualSVN Server
K 8
svn:date
V 27
2018-05-25T02:04:35.731309Z
K 7
svn:log
V 25
Created folder 'folder1'.
PROPS-END

Node-path: folder1
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END

删除下面一段

Node-path: Rep6_Folder1
Node-kind: dir
Node-action: add
Node-copyfrom-rev: 12
Node-copyfrom-path: folder1
Content-length: 0

Node-path: folder1
Node-action: delete
Content-length: 0

Revision-number: 14
Prop-content-length: 112
Content-length: 112

K 8
svn:date
V 27
2018-06-25T02:37:34.462649Z
K 7
svn:log
V 38
This is an empty revision for padding.
PROPS-END

然后按照导入失败的提示修改 Text-content-md5 后面的数字。前文已描述过了。

将 SVN Repositories 内部的下层目录,提升成为顶层 Repositories 的风险相关推荐

  1. SVN服务器搭建和web目录同步

    Linux环境下配置同步更新的SVN服务器 转自 http://www.neatstudio.com/show-571-1.shtml 先搭建环境 Linux版本选择Centos5.0(膘叔:我是用的 ...

  2. svn提示服务器禁止修改目录,SVN Eclipse插件中如何忽略对服务器已有文件修改后的提交...

    忽略分为两种情况. 1.服务器还不存在该文件/文件夹,提交的时候忽略. 2.服务器已经存在该文件/文件夹,提交的时候忽略. 第一种情况比较好处理. (svn:ignore) 1.1右键点击要忽略的文件 ...

  3. linux svn同步到本地目录,LINUX中SVN服务的搭建与实现SVN 自动同步到web目录,SVN自动启动...

    一,下载相关软件: [root@localhost test]# wget http://subversion.tigris.org/downloads/subversion-1.6.1.tar.gz ...

  4. windows,linux下SVN实现自动更新WEB目录

    http://www.bestphper.cn/article-132.html 通过SVN进行版本库管理,每次提交后,都要在SVN服务器更新最新上传的版本到WEB目录进行同步.操作比较烦琐,而且效率 ...

  5. svn怎么上传文件到具体目录linux,linux系统下SVN同步文件到WEB目录

    SVN在团队开发中使用非常普遍,是一个很方便的版本控制系统. 如果要是能将SVN服务器上的数据自动发布到Web服务器,那将是整个项目开发.测试更加便捷.利用SVN的hook功能就能实现将SVN服务器上 ...

  6. svn 单独导出某一个目录文件

    应需求,需要把svn版本库的某一个目录导出来,迁成另外一个库,查了下svn相关命令,可以使用svndumpfilter. 示例:svndumpfilter include /trunk/system ...

  7. centos7 svn自动更新至web目录

    本文记录通过svn的钩子脚本实现本地提交svn后,自动同步代码文件到服务器的网站目录下,而不必手动同步. 假如现在有: SVN版本库中的一个项目:/svn/rootwww/ 网站目录:/data/ww ...

  8. 安装完svn客户端后在bin目录中没有svn.exe文件

    场景: 将svn安装完成之后在bin中没有发现svn.exe 文件,这个时候就无法集成到idea编辑器中. 原因: 安装svn的时候是默认不安装command line client tools的. ...

  9. svn服务端开启某个目录的服务

    E:\Subversion>svnserve -d -r E:\svnroot 转载于:https://www.cnblogs.com/davidgu/archive/2012/10/08/27 ...

  10. 中只有负下标里才能有零_门诊营销第一人武威名:诊所如何提升成交率之零风险承诺的运用?...

    零风险承诺和负风险承诺在基层诊所的营销推广环节中有着很重要的作用!因为这项本领对于中小型企业营销来说是一个威力很大,甚至他不但是一项营销的技术,更像是一种理念或者思路: 虽说这对于诊所来说有点江湖游医 ...

最新文章

  1. 操作系统面试知识点总结2
  2. DNA测序,第一代DNA测序,第二代DNA测序,第三代DNA测序,sanger法
  3. python实训项目-实验楼Python项目
  4. Fluid 0.4 新版本正式发布:支持数据预热,优化小文件场景
  5. 万字长文重新解剖产品经理(内含大量图片)
  6. 两两交换链表中的节点Python解法
  7. 跨域调用webapi web端跨域调用webapi
  8. 手把手带你一起写迅雷官网
  9. OpenWrt中对USB文件系统的操作, 以及读写性能测试
  10. 利用openpyxl来读取Excel数据
  11. 10分钟学会写一个简单的Mysql存储过程
  12. GIS与CAD在村庄规划中的图框位置一致处理
  13. 在 X11 中实现 GTK+ 3 的 OpenGL 支持
  14. 如何免费在本地播放flv格式的视频
  15. Git中HEAD和ORIG_HEAD指针指的是什么
  16. 跨考计算机,一战398分成功上岸经验总结
  17. java获取当前日期 星期几_java获取当前日期是星期几的方法
  18. Android加载图片导致内存溢出(Out of Memory异常)
  19. Java 后端开发实践 - 项目模板(16 步)
  20. 安全狗入选信通院“业务安全推进计划”名单

热门文章

  1. 痱子的预防和治疗方法
  2. Bunch转化为DataFrame的一般方法
  3. EFI、UEFI、MBR、GPT的区别
  4. IllegalArgumentException: error Type referred to is not an annotation type:
  5. python修改图片大小为30kb_python 批量修改图片大小
  6. 国家区块链漏洞库 《区块链漏洞定级细则》发布
  7. c语言程序设计张新成课后习题答案,C语言练习题2
  8. BZOJ 1122 [POI2008]账本BBB 神题
  9. 德州农工大学计算机专业研究生,德州农工大学计算机工程(无论文)理学硕士研究生申请要求及申请材料要求清单...
  10. 有什么能测试安卓硬件的软件吗,手机硬件检测工具有哪些 总有一款适合你