lusson 发表于 2015-3-1 00:18:06

[转]将svn的项目转移到另外一个仓库中

注:因为原来的SVN仓库全在一个笔记本上,现在要迁移到NAS上,所以网上找到这个,试了下可以,不过只能一个工程一个工程的转移,且导出来的时候速度有点慢,但至少比重建好很多。
以下为转贴:



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

(在进行下面的操作时,请注意备份仓库数据,以免操作出错,损坏数据;同时保证需要迁移的项目,都已经commit,以免丢失修改)
1.首先关闭两台服务器的svn所有服务,比如(apache、svn),(以避免在进行迁移时又有其他的用户访问提交,更新什么的...

2.将ServerA上的 项目pro1所在的仓库进行备份,使用命令:
      svnadmin dump oldrepos > reposdumpfile
      上面的 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
      上面的newrepos表示:Server2电脑上的 svn仓库的路径 如:F:\svn_root\repos2;

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

myxiaonia 发表于 2015-3-1 07:33:24

nice,记号。。。有用的时候很有用

wildcat7261 发表于 2015-3-1 10:47:40

against。。。{:lol:}

worldsing 发表于 2015-3-2 10:31:43

myxiaonia 发表于 2015-3-1 07:33
nice,记号。。。有用的时候很有用

请教一个问题:
版本库里有V1版本,过程中做了两个分支
   V1
      /\
V2   V3
V4   V5
      V6

在以个新的目录里检测V1, 选择合并,起始是V1, 终止是V6(右边), 结果合并完后,提交,得到新版本V7, V7 = V1 + V3 + V5 + V6

这样理解是否正确?

再次合并左边,V8 = V7 + V2 + V4?

这过程中会发现第2次合并是有冲突,例如,左右分支同时修改一个文件的不同位置时,
冲突怎么解决?

worldsing 发表于 2015-3-2 10:44:20

另外, V8最终在版本视图中被列在了主干上,无法体现出是合并后的版本,只能通过人工日志加注是合并版本,
SVN客户端本身有没有办法看出V8是合并版本?

worldsing 发表于 2015-3-2 11:13:48

还有一种情况不理解:
1、本地建立以个SVN库,名为:SVN;
2、创建以个工程文件夹,名为:prj,并检出SVN库;
3、在prj目录内建立两个工程代码目录,libPrj和appPrj两个目录,并添加各自代码;
4、在libPrj修改,提交两次;
5、在appPrj修改,提交三次;
6、查看prj的版本视图是为空,而libPrj是1和2,appPrj是3,4,5;

我想appPrj应该是1,2,3。为什么只要在prj目录的任意位置提交,版本都最增长?
难道libPrj和appPrj两个目录需要单独建立SVN库目录才能实现版本单独控制?

lusson 发表于 2015-3-2 11:27:02

worldsing 发表于 2015-3-2 11:13
还有一种情况不理解:
1、本地建立以个SVN库,名为:SVN;
2、创建以个工程文件夹,名为:prj,并检出SVN库 ...

对的。
最好的方法是一个工程建立一个SVN仓库。
一个SVN仓库提交的记录是线性增加的,跟你里面有多少个文件夹有关系。

我感觉你使用SVN还是比较混乱啊。
你的合并我就感觉很奇怪。一般对于临时代码未确定的我们会放到branch中,然后确认后再手动合并到trunk中。不知道你的合并是什么意思

worldsing 发表于 2015-3-2 11:47:57

lusson 发表于 2015-3-2 11:27
对的。
最好的方法是一个工程建立一个SVN仓库。
一个SVN仓库提交的记录是线性增加的,跟你里面有多少个文 ...

多谢楼主指教,我第一次使用svn。
没有完全理解,正规是应该按svn推荐的结构操作,我这时尝试按自己的目录结构来操作分支和合并的作用
分支都放在一个目录里,怎么区分不同的分支?

myxiaonia 发表于 2015-3-3 07:38:49

worldsing 发表于 2015-3-2 10:31
请教一个问题:
版本库里有V1版本,过程中做了两个分支
   V1


两个不同分支才叫合并,因此这个V7不存在

V8是叫做合并,冲突很正常,产生冲突的地方你可以选择使用哪边的内容,在冲突对话框中点击 某个文件->解决冲突,弹出个比较合并界面,和beyond compare差不多的

我所说的都是在torotisesvn中的结果

myxiaonia 发表于 2015-3-3 07:46:05

worldsing 发表于 2015-3-2 10:44
另外, V8最终在版本视图中被列在了主干上,无法体现出是合并后的版本,只能通过人工日志加注是合并版本,
...

看你选择合并的方向了,也可以合并到分支

合并后其实会改变版本库文件夹的属性,那里记录了你的合并范围

myxiaonia 发表于 2015-3-3 07:57:08

worldsing 发表于 2015-3-2 11:13
还有一种情况不理解:
1、本地建立以个SVN库,名为:SVN;
2、创建以个工程文件夹,名为:prj,并检出SVN库 ...

这个版本号是个操作记录,每个改变库内容的操作都会加1,比如提交,分支,合并,删除等等

myxiaonia 发表于 2015-3-3 08:08:16

worldsing 发表于 2015-3-2 11:47
多谢楼主指教,我第一次使用svn。
没有完全理解,正规是应该按svn推荐的结构操作,我这时尝试按自己的目 ...

prj下libprj和appprj可以看作是一个项目的不同代码重新分组而已,你修改的所有提交都应该在主干,分支和主干都是全功能代码,分支只是发展方向出现差异后单独维护的一份完整代码,同样分支目录结构应该出现在版本库中而不是外部

worldsing 发表于 2015-3-4 13:02:38

myxiaonia 发表于 2015-3-3 08:08
prj下libprj和appprj可以看作是一个项目的不同代码重新分组而已,你修改的所有提交都应该在主干,分支和 ...

多谢指导
基本明白了,有版本管理确实方便了不少,以前都是打包。

mq-life 发表于 2015-3-4 13:10:24

楼主在NAS上使用SVN吗,您买的NAS是哪个型号的

lusson 发表于 2015-3-4 13:23:28

mq-life 发表于 2015-3-4 13:10
楼主在NAS上使用SVN吗,您买的NAS是哪个型号的

WD My Cloud
西部数据的3T版本

lusson 发表于 2015-3-4 13:24:02

worldsing 发表于 2015-3-4 13:02
多谢指导
基本明白了,有版本管理确实方便了不少,以前都是打包。

打包的是CVS时代?

worldsing 发表于 2015-3-5 12:40:28

没有,就是编辑器编辑代码,在维护个txt文件记录修改日志
手动打包。{:loveliness:}
页: [1]
查看完整版本: [转]将svn的项目转移到另外一个仓库中