我有一个现有的SVN存储库,其中包含一个包含我的项目的文件夹。 我想知道是否有一种方法可以创建一个新的存储库,将我的项目文件夹设置为其根目录,并保留所有的subversion历史记录(日志)。请注意,我不介意丢失原始存储库修订号。
感谢。
答案 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%
注意:在同步完成之前,您将无法浏览新的存储库。