我有一个这个文件夹结构的常规svn repo:
conf
dav
db
hooks
locks
如何将其迁移到
trunk
branches
tags
结构而不会失去我的历史?
答案 0 :(得分:7)
你有两件事困惑。第一个是存储库的代表性。第二个是存储库物理结构化的方式。无论您做什么,您的存储库都将始终具有物理结构。
要真正理解您的问题,您需要向我们展示 Representational 结构。为此,请运行以下命令:
$ 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以匹配新的存储库结构。
答案 1 :(得分:1)
你很可能会混淆两件截然不同的事情:
要查看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存储库中。
也可以为其他文件夹/文件执行此操作。