我有一个具有此文件夹结构的常规 svn 存储库:
conf
dav
db
hooks
locks
我怎样才能将它迁移到
trunk
branches
tags
结构而不丢失我的历史?
我有一个具有此文件夹结构的常规 svn 存储库:
conf
dav
db
hooks
locks
我怎样才能将它迁移到
trunk
branches
tags
结构而不丢失我的历史?
你有两件事混淆了。首先是存储库的表示。第二个是存储库的物理结构。无论您做什么,您的存储库都将始终具有该物理结构。
要真正理解您的问题,您需要向我们展示表示结构。为此,请运行以下命令:
$ svn ls $REPO
$REPO
您的存储库的根 URL在哪里。例如,您如何签出项目?像这样?
$ svn checkout http://svn.firstvegibankcorp.com/svn/project
然后$REPO
会http://svn.firstvegibankcorp.com/svn
。
幸运的是,你总是可以用它svn mv
来移动东西。我会将确切的命令附加到我的答案中,但我不知道您当前的布局。
branches
、、、tags
和trunk
目录假设人们只是在没有设置的情况下签入文件:
$ shop -s extglob # Assuming BASH. No need to do this with Kornshell
$ svn co --depth=immediates $REPO workdir # Checks out first level of the directories
# cd workdir
$ svn mkdir trunk # Create the "trunk" directory
$ svn mv !(trunk) trunk # Moves all files and directories to under trunk
# svn mkdir branches tags # Make the rest of the structure
$ svn commit -m"Creating basic directory structure. # That's it!
另一种方法是转储和加载您的物理存储库。您将存储库关闭,创建转储,然后创建带有负载的新版本。您可以指定--parent-dir
参数:
$ ssh $SVN_REPO_SYSTEM
$ cd /opt/svn_repos
$ svnadmin create new_repo
$ svnadmin dump repo | svnadmin load --parent-dir trunk new_repo
这将转储您的物理存储库,然后立即将其加载到新存储库中。所有历史记录和修订都将被保留。但是,它们不会位于存储库表示结构的根目录中,而是位于trunk
目录下。用户必须使用svn switch
切换其本地工作目录的 URL 以匹配新的存储库结构。
您很可能会混淆两个非常不同的事情:
要查看 SVN 存储库的内容,您应该使用某种客户端。示例:svn.exe(命令行客户端)、TortoiseSVN(集成到 Windows 资源管理器中的 GUI 客户端)。trunk-branches-tags 约定适用于存储库内容。
在磁盘上 SVN 通常存储为一组文件和文件夹(conf、dav、...),但您不应该触摸它们,SVN 将管理该结构。而这种结构与内容的结构无关。
让您的存储库http://svn.atyourserver/
包含上述子文件夹。
创建svn mkdir http://svn.atyourserver/trunk
一个新文件夹(您可能还必须使用-m
-Parameter 进行评论)。
对分支和标签也这样做。
然后做一个svn move http://svn.atyourserver/conf http://svn.atyourserver/trunk
. 这会将文件夹(或文件)移动conf
到文件夹trunk
,保留历史记录,因为一切都在 subversion 存储库中。
也为您的其他文件夹/文件执行此操作。