2009-06-01 87 views
2

我有一个现有的SVN存储库,其中包含一个文件夹,其中包含我的项目。 我想知道是否有方法创建一个新的存储库,并将我的项目文件夹设置为其根目录,并保留所有的subversion历史记录(日志)。请注意,我不介意丢失原始存储库修订版本号。SVN文件夹到新的存储库根目录

谢谢。

+0

正在创建一个新的回购钥匙在这里或只是摆脱一个级别的子目录?如果后者,“svn move”是你的朋友。 – laalto 2009-06-01 08:47:33

+1

此问题已被询问并回答了几次 - 搜索“svndumpfilter”。 – 2009-06-01 08:51:49

回答

2

您可以手动复制存储库,也可以使用svnadmin。

然后,您可以将项目的子目录移到根目录下,并删除其他所有内容,从而保留所需的目录结构。历史将被保存,每个文件,但它会记住,文件曾经有一个不同的路径(这可能是一件好事)。

2

Avi的解决方案可能是最简单的,但有一个缺点是新的存储库将包含此项目之外的所有内容的完整历史记录。在下面的例子中,我假设你在* NIX机器的命令行,并且你在一个包含现有存储库的目录中。

svnadmin create new-project-repo # create new repo next to old repo 
svnadmin dump old-project-repo | svnadmin load new-project-repo 
svn mv file://$PWD/new-project-repo/my-project/trunk file://$PWD/new-project-repo/trunk 
svn mv file://$PWD/new-project-repo/my-project/branches file://$PWD/new-project-repo/branches 
svn mv file://$PWD/new-project-repo/my-project/tags  file://$PWD/new-project-repo/tags 
# ... svn rm file://$PWD/new-project-repo/XXX for all the cruft still at the top level. 

如果您正在运行subversion 1.6.x,svnsync提供了一个更好的选择。在1.6.x之前,svnsync只能用于复制整个存储库。在1.6.x版本中,它只能复制存储库的给定子树。

svnadmin create new-project-repo 
# svnsync needs the ability to set revision properties, so we must install a pre-revprop-change 
# hook script which just exits with status 0 (no error). On *NIX systems, the program `true` will do this. 
ln -s /usr/bin/true new-project-repo/hooks/pre-revprop-change # possibly /bin/true 
svnsync init file://$PWD/new-project-repo file://$PWD/old-project-repo/my-project 
svnsync sync file://$PWD/new-project-repo 
# go drink some coffee 
1

仅供参考:svnsync选项为我工作的颠覆1.5.3。

而且,这里是一个Windows批处理脚本做同样的事情:

SET OLD_REPO_URL =
SET NEW_REPO_URL = d:/资料库/新项目回购
SET NEW_REPO_FILE_PATH = d:\库\新项目回购

svnadmin的创建%NEW_REPO_FILE_PATH%
回声退出0>%NEW_REPO_FILE_PATH%\吊钩\版本属性前,change.bat

svnsync的init文件:///%NEW_REPO_URL%%OLD_REPO_URL%
svnsync的文件:///%NEW_REPO_URL%

注意:您将无法直到同步完成浏览新的存储库。

相关问题