首页 > 代码库 > 将svn的项目从一台服务器转移到另外一台服务器

将svn的项目从一台服务器转移到另外一台服务器

前几天在做一个项目的时候,因为需要,需要将Server A 上SVN仓库 repos1中的项目pro1迁移到Server B 上的SVN仓库中,首先想到的是:通过复制,但是仔细一想,这样是不可能的;然后想到的是先把项目pro1 checkout到本地,然后再 将本地的项目 import 到 ServerB的svn仓库中,但这样一来,ServerB上的SVN仓库中 就好比完全是一个新的pro1项目了,也就失去了svn管理的意义了。下面有一种方法可以解决:

 

(在进行下面的操作时,请注意备份仓库数据,以免操作出错,损坏数据;同时保证需要迁移的项目,都已经commit,以免丢失修改)

1.首先关闭两台服务器的svn所有服务,比如(apache、svn),(以避免在进行迁移时又有其他的用户访问提交,更新什么的...  

关闭svn

  killall svnserve 

2.将ServerA上的 项目pro1所在的仓库进行备份,使用命令:

      svnadmin dump oldrepos > reposdumpfile

如:svnadmin dump javaweb > javaweb2

      上面的 oldrepos 表示服务器Server1上需要备份的仓库,如:E:\svn_root\repos1;

       reposdumpfile表示一个中转的文件,文件名随意;

       运行完上面的命名后,文件reposdumpfile就存储了仓库oldrepos的信息和所有项目;

 

3.如果需要将Server A上repos1中的所有项目迁移到Server2上,则将reposdumpfile文件直接拷贝到Server2上,然后转到 步骤5;

【可用一个软件直接拷贝到本地,然后用软件拷贝到新的服务器上】

 

4.如果我们只需要repos1仓库中的pro1则我们需还要对reposdumpfile文件进行过滤,命令如下:

       svndumpfilter include pro1 < reposdumpfile< pro1dumpfile

       上面的 include 表示 包含的意思,也就是说,将reposdumpfile中的 pro1 的项目取来放到文件 pro1dumpfile 中;如果使用 exclude 这表示相反的意思,将不是项目pro1的项目存放到文件中去;然后将pro1dumpfile文件拷贝到Server2上;

 

5.在Server2上运行如下命令,则完成了项目的迁移;

      svnadmin load newrepos < pro1dumpfile

 如:svnadmin load javaweb < javaweb2

      上面的newrepos表示:Server2电脑上的 svn仓库的路径 如:F:\svn_root\repos2;

 

6.最后打开svn服务,这样就成功的将项目迁移到了其他仓库中

如:svnserve -d  -r /opt/svndata启动

-------------------------------------------------------

亲测成功