目前,我为每个项目设置了根级存储库,如下所示:
Project1
Project2
Project3
Project5
Project5
我想重新组织这个,以便不是每个项目的存储库,而是每个逻辑分组只有一个,然后项目只是这些“组存储库”中的文件夹,例如:
WebSites
Project1
Project2
DesktopApps
Project3
Libraries
Project4
Project5
在保留现有存储库的历史记录的同时,这是否可行?我环顾四周,但我能找到的就是在同一个存储库中移动文件夹,并将文件夹移出存储库到新的存储库中。
无论如何,这只是个人的事情,所以如果它只是一个直接的'不'那么它不是世界末日 - 但是知道所以我不仅仅是把头撞在墙上会很好:)。 p>
答案 0 :(得分:25)
您应该能够将其转储,然后将其重新加载到新存储库的子目录中:
svnadmin dump http://oldrepo/> mydump
svnadmin load --parent-dir my / new / folder http://newrepo/< mydump
答案 1 :(得分:11)
答案 2 :(得分:1)
您可以使用tailor将修订导入新存储库。它一个接一个地从旧存储库中检出代码并将其提交到新存储库。
这也可用于将一种版本控制系统的历史转换为另一种版本。
裁缝项目文件如下所示:
[DEFAULT]
root-directory = /var/tmp/tailor
verbose = true
[myproject]
source = svn:oldrepo
target = svn:newrepo
start-revision = INITIAL
[svn:oldrepo]
repository = svn://oldhost.example.com/svnroot
module = trunk
subdir = repo-in
[svn:newrepo]
repository = svn://newhost.example.com/some/path
module = trunk
subdir = repo-out
如果此文件被称为settings.cfg
,则会通过重新命令将旧存储库重建的/trunk
复制到新位置:
tailor --configfile=settings.cfg myproject
目标存储库需要已经存在,并且可能应该有一个空的trunk
子目录。
答案 3 :(得分:1)
由于接受的答案是不完整的,并且没有得到纠正,以下是您实际操作的方法。
(1)您的源代码是一个单项目仓库,顶级目录为foo
。转到旧服务器并创建转储文件:
[old-server]$ svnadmin dump /path/to/old-repo > foo.dump
(2)您的目标仓库已包含两个项目,顶级目录bar
和baz
,位于http://new-server/svn
。现在创建一个额外的foo
顶级:
[client]$ svn ls http://new-server/svn/
bar/
baz/
[client]$ svn mkdir -m "Adding new foo project" http://new-server/svn/foo
[client]$ svn ls http://new-server/svn/
bar/
baz/
foo/
(3)在您的新服务器上,仓库位于/path/to/new-repo
(http://new-server/svn/
映射到的位置)。请注意,上面的svn mkdir
实际上并没有在/path/to/new-repo
中创建新目录;它只是改变了数据库。转到新服务器和
[new-server]$ svnadmin load /path/to/new-repo --parent-dir foo < foo.dump
完成,完整的历史。您现在可以将foo
结帐为:
[client]$ svn co http://new-server/svn/foo foo
如果这是您第一次完成svnadmin
,则可能会发现您获得了文件权限错误(txn-current-lock
/ etc),例如,如果repo归apache
,并且您不在apache
群组中。最简单的解决方法是将自己添加到apache
组。