将常规SVN repo迁移到trunk-branches-tags文件夹结构中

时间:2013-10-03 15:37:01

标签: svn version-control

我有一个这个文件夹结构的常规svn repo:

conf
dav
db
hooks
locks

如何将其迁移到

trunk
branches
tags

结构而不会失去我的历史?

3 个答案:

答案 0 :(得分:7)

你有两件事困惑。第一个是存储库的代表性。第二个是存储库物理结构化的方式。无论您做什么,您的存储库都将始终具有物理结构。

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

 $ svn ls $REPO

$REPO是您的存储库的根URL。例如,您如何结帐项目?喜欢这个?

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

然后$REPO将为http://svn.firstvegibankcorp.com/svn

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

假设没有,branchestagstrunk目录

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

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

答案 1 :(得分:1)

你很可能会混淆两件截然不同的事情:

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

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

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

答案 2 :(得分:0)

让您的存储库为http://svn.atyourserver/以及上述子文件夹。

创建一个svn mkdir http://svn.atyourserver/trunk来创建一个新文件夹(您可能还需要使用-m - 参数作为评论)。

对分支和标签也这样做。

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

也可以为其他文件夹/文件执行此操作。