0

我有一个具有此文件夹结构的常规 svn 存储库:

conf
dav
db
hooks
locks

我怎样才能将它迁移到

trunk
branches
tags

结构而不丢失我的历史?

4

3 回答 3

7

你有两件事混淆了。首先是存储库的表示。第二个是存储库的物理结构。无论您做什么,您的存储库都将始终具有该物理结构。

要真正理解您的问题,您需要向我们展示表示结构。为此,请运行以下命令:

 $ svn ls $REPO

$REPO您的存储库的根 URL在哪里。例如,您如何签出项目?像这样?

$ svn checkout http://svn.firstvegibankcorp.com/svn/project

然后$REPOhttp://svn.firstvegibankcorp.com/svn

幸运的是,你总是可以用它svn mv来移动东西。我会将确切的命令附加到我的答案中,但我不知道您当前的布局。

假设根本没有branches、、、tagstrunk目录

假设人们只是在没有设置的情况下签入文件:

$ 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 以匹配新的存储库结构。

于 2013-10-03T17:54:10.330 回答
1

您很可能会混淆两个非常不同的事情:

  • SVN 存储库的内容
  • SVN 存储库存储在磁盘上的方式

要查看 SVN 存储库的内容,您应该使用某种客户端。示例:svn.exe(命令行客户端)、TortoiseSVN(集成到 Windows 资源管理器中的 GUI 客户端)。trunk-branches-tags 约定适用于存储库内容。

在磁盘上 SVN 通常存储为一组文件和文件夹(conf、dav、...),但您不应该触摸它们,SVN 将管理该结构。而这种结构与内容的结构无关。

于 2013-10-03T16:32:51.333 回答
0

让您的存储库http://svn.atyourserver/包含上述子文件夹。

创建svn mkdir http://svn.atyourserver/trunk一个新文件夹(您可能还必须使用-m-Parameter 进行评论)。

对分支和标签也这样做。

然后做一个svn move http://svn.atyourserver/conf http://svn.atyourserver/trunk. 这会将文件夹(或文件)移动conf到文件夹trunk,保留历史记录,因为一切都在 subversion 存储库中。

也为您的其他文件夹/文件执行此操作。

于 2013-10-03T15:57:10.787 回答