如何干净的独立一个 svn 项目目录

需要从一个庞大的版本库中将一个项目目录独立出来,这个问题很常见,解决方法也差不多,这里有详细讲解:

http://blog.chrisramsay.co.uk/2008/11/03/split-up-a-multi-project-svn-repo/

不过这么处理之后,会有一个遗留问题,那就是会留下大量垃圾日志。整个代码库内的日志全部都会保留,无论是否属于本项目。在大量搜索的基础上,发现这个问题基本无解,甚至准备放弃。

考虑几天后,突发奇想,笨人用笨法,全库操作不可行,咱就一个一个来。通过依次 dump 每个版本,来达到仅同步有用版本的目的。

具体方法如下:

一、建立空库,啰嗦一下:

svnadmin create tempsvn

二、取得目标项目的版本列表:

svn log file:///var/svn/team1/prj2 > log.txt

三、依次将版本列表中的版本同步到临时库中。

我比较偷懒,直接用 UltraEdit 的宏处理了文件,勤快的人不妨根据自己的需要写一个小程序,与大家分享。最后我处理出的文本是这样的:

svnadmin dump -r 128 file:///var/svn | svnadmin load tempsvn
svnadmin dump --incremental -r 139 file:///var/svn | svnadmin load tempsvn
svnadmin dump --incremental -r 153 file:///var/svn | svnadmin load tempsvn
......

需要注意两点,log 出来的文件版本号是从大到小的,需要倒序一下;第一个版本的操作需要与后面的版本不同,后面的版本需要增量 dump。

保存文件并执行,Linux 还需要做一些修改,不罗嗦了。

四、更换项目目录。

经过上面的步骤,tempsvn 里便有了一份干净的只有与 team1/prj2 有关系的版本库,但是代码库中还可能因为历史提交的原因包含其他路径的文件,需要再进行一次 dump,svndumpfilter,load 的过程,这些方法前面我提到的博客都有介绍。当然你可以同时修改路径等其他操作。

方法虽然达到目的了,但是因为需要依次同步版本,所以实际操作耗时稍微长一些。




Related posts

coded by nessus

发表评论