SVN不同库之间的合并(同步)解决方案

来源:互联网 发布:xmanager for mac下载 编辑:程序博客网 时间:2024/06/07 00:48

前提条件

一:公司和项目组,统一使用某个版本的SVN server及SVN client;

二:规范对SVN的操作,包括SVN的权限管理,添加,删除,修改等动作的执行;

三:项目组配置管理员必须保证项目组SVN最后提交到公司的版本的稳定性;

四:对涉及到修改dump文件的时候,请务必基于linux操作系统进行修改;

请参看附录内容,切记。

 

实施环境

一:公司级SVN配置库,linux操作系统;项目组级,可视情况而定;

二:SVN版本subversion-1.6.15.tar.bz2;subversion-deps-1.6.15.tar.bz2;httpd- 2.2.17.tar.bz2;TortoiseSVN-1.6.12.20536-win32-svn-1.6.15.msi

三:命令说明

svnadmin dump 将SVN库进行特定格式的转储备份工作,生成dump备份文件;

svndumpfilter   将SVN的dump备份文件进行过滤,去除不必要的或必须要去掉的目录;

svnadmin load  将SVN的dump备份文件进行恢复;

 

操作步骤详细说明

 

公司配置管理员
第一步:将项目组所需要带走的东西,先提取开分支;生成/branches/XX项目/V1.0

第二步:在公司SVN服务器下,使用命令svnadmin dump SVN库目录 -r HEAD > dump文件存放地/XXX.dump

 

第三步:svndumpfilter include /branches/XX项目/V1.0 < dump文件存放地/XXX.dump > filter文件存放地/filterXXX.dump

注意:此处的XXX.dump与第二步中的XXX.dump是同一文件

 

第四步:备份filterXXX.dump,然后在linux系统下编辑filterXXX.dump文件。将无关路径去掉,在修改文件时注意,不要随意添加空格,换行等字符,因为svn dump文件的字符编码格式与其它不同。不能轻易修改。

第五步:完成后,将filterXXX.dump文件另存为 "XX项目.dump"文件,交付项目组配置管理员.

 

项目配置管理员
第一步:从公司配置管理员处获得 "XX项目.dump" 文件;
第二步:在项目组内搭建全新的SVN库,并建立SVN库的初始目录,如下
       http://localhost/svn/XXX
                                /trunk
                                /branches
                                /tags
第三步:将 "XX项目-dump" 文件导入库中的/trunk目录下, svnadmin load SVN库目录 –parent-dir /trunk < XX项目-dump


第四步:对SVN库进行适当的权限分配;

第五步:项目结束后,使用svn dump命令,对SVN进行备份。svnadmin dump SVN库目录 > dump文件存放地/XX项目-结项.dump

要求:1)首先确保项目组的SVN库/trunk目录下的东西齐全,并且是项目所有资源的最新状态;2)全库dump,不可仅dump HEAD;

第六步:同样对备份文件执行过滤操作,要求仅保留/trunk   svndumpfilter include /trunk < dump文件存放地/XXX.dump > filter文件存放地/filterXXX.dump

第七步:回到公司后,配合公司配置管理员进行SVN备份文件恢复性测试,完整性检查等工作。确保交付给公司配置管理员的内容完整无误。

 

公司配置管理员
第一步:与项目配置管理员确认备份文件无误后,开始进行项目归档准备工作;
第二步:删除/branches/XX项目/V1.0下面的所有东西;
第三步:确认项目带回的dump文件修改无误,使用svnadmin load命令,将文件内容导入/branches/XX项目/V1.0下;确认导入无误,要特别注意检查路径。
第四步:将/branches/XX项目/V1.0合并至主干相应路径下。完成项目入库,归档工作。

 

案例解析

公司配置管理员
第一步:将项目组所需要带走的东西,先提取开分支;生成/branches/XX项目/V1.0


第二步:在公司SVN服务器下,使用命令svnadmin dump SVN库目录 -r HEAD > dump文件存放地/XXX.dump




第三步:svndumpfilter include /branches/XX项目/V1.0 < dump文件存放地/XXX.dump > filter文件存放地/filterXXX.dump

注意:此处的XXX.dump与第二步中的XXX.dump是同一文件




 

第四步:这一步是最关键的,此步决定了备份文件是否可正确恢复至项目组指定的库的指定目录下。请严格注意。备份filterXXX.dump,然后在linux系统下编辑filterXXX.dump文件。将无关路径去掉,在修改文件时注意,不要随意添加空格,换行等字符,因为svn dump文件的字符编码格式与其它不同。不能轻易修改


vi /home/user/workroot/filter.dump(使用查找替换命令:g/branches/V1.0//s///g,将branches/V1.0/ 全部替换)

第五步:完成后,将filterXXX.dump文件另存为 "XX项目.dump"文件,交付项目组配置管理员.

 

项目配置管理员
第一步:从公司配置管理员处获得 "XX项目.dump" 文件;
第二步:在项目组内搭建全新的SVN库,并建立SVN库的初始目录,如下
       http://localhost/svn/XXX
                                /trunk
                                /branches
                                /tags
第三步:将 "XX项目-dump" 文件导入库中的/trunk目录下, svnadmin load SVN库目录 –parent-dir /trunk < XX项目-dump


完成后,效果应该如下图:




 

至此,项目组已可以开始正常工作.


第四步:对SVN库进行适当的权限分配;

第五步:项目结束后,使用svn dump命令,对SVN进行备份。svnadmin dump SVN库目录 > dump文件存放地/XX项目-结项.dump

要求:1)首先确保项目组的SVN库/trunk目录下的东西齐全,并且是项目所有资源的最新状态;2)全库dump,不可仅dump HEAD;

 


第六步:同样对备份文件执行过滤操作,要求仅保留/trunk   svndumpfilter include /trunk < dump文件存放地/XXX.dump > filter文件存放地/filterXXX.dump

 


第七步:回到公司后,配合公司配置管理员进行SVN备份文件恢复性测试,完整性检查等工作。确保交付给公司配置管理员的内容完整无误。

 

公司配置管理员
第一步:与项目配置管理员确认备份文件无误后,开始进行项目归档准备工作;
第二步:删除/branches/XX项目/V1.0下面的所有东西;
第三步:确认项目带回的dump文件修改无误,使用svnadmin load命令,将文件内容导入/branches/XX项目/V1.0下;确认导入无误,要特别注意检查路径。

(此处过滤,与上面过滤相同,只是路径可能不同,请公司配置管理员注意)
第四步:将/branches/XX项目/V1.0合并至主干相应路径下。完成项目入库,归档工作。

 





请先Test merge,确认无误后,再进行merge。在merge过程中,请谨慎操作。这个对公司级配置管理员要求较高.

 

所有工作完成后:效果图如下:

 

项目组所有添加,删除,修改等动作,均可记录。做到了异地非联网状态SVN的同步;对SVN维护者来说,相当于做了一次分支开发,完成后合并至主干的操作。



转自:http://hi.baidu.com/hnsmczw/blog/item/0599b228437db4e6e7cd407f.html