所以挑战是这样的:
我们有一个SVN存储库服务器,其中包含多个项目:
http://server.com/svn/projectA/trunk
http://server.com/svn/projectA/branches
http://server.com/svn/projectA/tags
http://server.com/svn/projectB/trunk
http://server.com/svn/projectB/branches
http://server.com/svn/projectB/tags
Project A 和 Project B 实际上只是 ProjectX 的组件。现在大家想要的是:
http://server.com/svn/projectX/trunk/ProjectA
http://server.com/svn/projectX/trunk/ProjectB
http://server.com/svn/projectX/branches/OldVersion/ProjectA
http://server.com/svn/projectX/branches/OldVersion/ProjectB
http://server.com/svn/projectX/tags/PreMajorChange/ProjectA
http://server.com/svn/projectX/tags/PreMajorChange/ProjectB
我在想 svndump,但随后重新检查所有这些数据排序意味着我们的修订号将超过 100,000。不确定这是最好的方法(或者这可能是唯一的方法)。
还是像svn移动一样简单?
使用 svn move
.它将保留历史记录,并将最小地增加SVN存储库的大小。首先,在根级别签出存储库,然后执行以下操作:
mkdir -p projectX/{trunk,branches/OldVersion,tags/PreMajorChange}
svn add projectX
svn move projectA/trunk projectX/trunk/ProjectA
svn move projectA/branches/* projectX/branches/OldVersion/ProjectA
svn move projectA/tags/* projectX/tags/PreMajorChange/ProjectA
svn move projectB/trunk projectX/trunk/ProjectB
svn move projectB/branches/* projectX/branches/OldVersion/ProjectB
svn move projectB/tags/* projectX/tags/PreMajorChange/ProjectB
svn commit . -m "Restructuring"
首先在测试存储库上尝试(例如,按svnadmin hotcopy
复制现有存储库)。
我想你想保留提交历史记录,即使没有明确编写?
可以为 ProjectX 创建一个新的存储库,然后使用 svn:externals 属性将项目 A 和 B 链接到其中。它就像普通 FS 中的符号链接。您可以在此处阅读快速示例。
这是更简单的方法,因为您不必执行一些"危险"操作。