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

kak*_*kyo 0 svn version-control

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

conf
dav
db
hooks
locks
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它迁移到

trunk
branches
tags
Run Code Online (Sandbox Code Playgroud)

结构没有失去我的历史?

Dav*_* W. 7

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

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

 $ svn ls $REPO
Run Code Online (Sandbox Code Playgroud)

$REPO您的存储库的根URL 在哪里.例如,您如何结帐项目?像这样?

$ svn checkout http://svn.firstvegibankcorp.com/svn/project
Run Code Online (Sandbox Code Playgroud)

然后$REPOhttp://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!
Run Code Online (Sandbox Code Playgroud)

另一种方法是转储和加载物理存储库.您将存储库关闭,创建转储,然后使用加载创建新版本.您可以指定--parent-dir参数:

$ ssh $SVN_REPO_SYSTEM
$ cd /opt/svn_repos
$ svnadmin create new_repo
$ svnadmin dump repo | svnadmin load --parent-dir trunk new_repo
Run Code Online (Sandbox Code Playgroud)

这将转储您的物理存储库,然后立即将其加载到新的存储库.所有历史和修订都将被保留.但是,它们不在存储库表示结构的根目录下,而是位于trunk目录下.用户必须使用svn switch切换其本地工作目录的URL以匹配新的存储库结构.