SVN文件夹到新存储库根目录

SVN文件夹到新存储库根目录,svn,migration,repository,Svn,Migration,Repository,我有一个现有的SVN存储库,其中包含一个保存我的项目的文件夹。 我想知道是否有一种方法可以创建一个新的存储库,将我的项目文件夹设置为其根目录,并保留所有的subversion历史记录(日志)。请注意,我不介意丢失原始存储库修订号 谢谢。您可以手动或使用svnadmin复制存储库 然后,您可以将项目的子目录移动到根目录下,并删除所有其他内容,从而保留所需的目录结构。每个文件都会保留历史记录,但它会记住,以前的文件有不同的路径(这可能是一件好事)。Avi的解决方案可能是最简单的,但其缺点是,新存储库

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


谢谢。

您可以手动或使用svnadmin复制存储库


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

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.
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
如果您正在运行subversion 1.6.x,svnsync提供了一个更好的选项。在1.6.x之前,svnsync只能用于复制整个存储库。使用1.6.x,它可以只复制存储库的给定子树

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.
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

仅供参考:svnsync选项在subversion 1.5.3中对我有效

另外,下面是一个Windows批处理脚本,它执行相同的操作:

设置旧的\u REPO\u URL=
设置NEW\u REPO\u URL=D:/Repositories/NEW project REPO
设置新的\u REPO\u FILE\u PATH=D:\Repositories\NEW project REPO
svnadmin创建%NEW\u REPO\u FILE\u PATH%
echo退出0>%NEW\u REPO\u FILE\u PATH%\hooks\pre revprop change.bat

svnsync init文件://%NEW\u REPO\u URL%%OLD\u REPO\u URL%
svnsync文件:///%NEW\u REPO\u URL%


注意:在同步完成之前,您将无法浏览新的存储库。

这里的关键是创建新的repo,还是仅仅删除一级子目录?如果是后者,“svn移动”是您的朋友。这个问题已经被问过并回答过几次了-搜索“svndumpfilter”。