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

时间:2009-06-01 08:43:11

标签: svn migration repository

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

感谢。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

仅供参考:svnsync选项适用于我的subversion 1.5.3。

此外,这是一个Windows批处理脚本执行相同的操作:

  

SET OLD_REPO_URL = https://old-project-repo/my-project
  SET NEW_REPO_URL = D:/ Repositories / new-project-repo
  SET NEW_REPO_FILE_PATH = D:\ Repositories \ new-project-repo

  svnadmin创建%NEW_REPO_FILE_PATH%
  echo exit 0> %NEW_REPO_FILE_PATH%\钩\的pre-revprop-change.bat

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

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