需要从一个庞大的版本库中将一个项目目录独立出来,这个问题很常见,解决方法也差不多,这里有详细讲解:
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
- ubuntu 上 redmine 安装及 svn 权限绑定
- 纠结的 websocket 握手协议
- Ubuntu 安装 Java[转]
- 免费邮箱搬家
- 在 Ubuntu 上安装 MingW-W64 交叉编译环境[转]
您可以用合作网站帐号登录:
程序提供: 连接微博