如何将SVN存储库更改为使用trunk/branchs/tags结构并将工作副本切换到它

如何将SVN存储库更改为使用trunk/branchs/tags结构并将工作副本切换到它,svn,Svn,我当前的存储库是:/var/www/svn/project。项目文件夹中的所有文件。到目前为止,它没有主干、分支和标记结构。现在我创建了一个新项目,名为“/var/www/svn/projectnew”,包含主干、分支和标记。我获取了“/var/www/svn/project”的转储文件,并将其加载到“/var/www/svn/projectnew/trunck”,并从trunk在“/var/www/svn/projectnew/branchs/site1”中创建了一个分支 当前我的工作副本指向

我当前的存储库是:/var/www/svn/project。项目文件夹中的所有文件。到目前为止,它没有主干、分支和标记结构。现在我创建了一个新项目,名为“/var/www/svn/projectnew”,包含主干、分支和标记。我获取了“/var/www/svn/project”的转储文件,并将其加载到“/var/www/svn/projectnew/trunck”,并从trunk在“/var/www/svn/projectnew/branchs/site1”中创建了一个分支

当前我的工作副本指向“/var/www/svn/project”。我试图将我的工作副本从“/var/www/svn/project”切换到“/var/www/svn/projectnew/branchs/site1”
,但它说

存储库UUID“d3f06af7-c344-2d45-b1bd-7799e0e99d7a”与预期UID“f5f9f6ac-3f50-7e4d-a9d4-0BC9A49B443B8”不匹配

请帮助我如何处理此问题?

原始答复:

这里可以做两件事——一件是将文件
db/uuid
从旧服务器复制到新服务器,如果您只是将svn存储库转移到一台新机器上,并且计划关闭旧服务器。另一件事取决于您使用的SVN版本。如果您使用的是1.7,那么请使用
svn relocate
(请参阅),或者对于较老的客户端,请使用
svn switch
命令的
--relocate
选项,该命令适用于此场景

编辑:

我误解了——您想用trunk/branchs/tags结构重新创建存储库。在这种情况下,转储和重新加载项目不会有帮助,因为它不会神奇地创建新的结构——它只会重新创建您已经拥有的内容。不过,您可以在存储库浏览器中(如果您使用的是OrtoiseSVN)或直接从工作副本轻松创建新结构。如果您是从命令行执行此操作,那么根据确切的目录结构,语法将如下所示。将
http:…/
替换为svn服务器的地址。哦,首先备份存储库

# check out top-level directory
svn co http://.../
# make new trunk dir and move all contents to it -- note spelling of 'trunk'
mkdir trunk
svn add trunk
svn mv * trunk

# now create tags and branches
mkdir tags
mkdir branches
svn add trunk tags branches

svn commit -m "Created new repository layout"
现在,要切换现有工作副本,您只需执行以下操作:

svn switch http://.../project  http://.../trunk/project

另一种方法是保持历史不变,并从新版本开始切换到新结构。在这种情况下,您不需要对存储库进行转储/加载操作

  • “svn删除”存储库根目录中的所有内容
  • 创建主干/分支/标记结构
  • “svn复制”存储库内容从修订版删除到主干

  • 您是如何使用工具转储项目的?若您只是复制粘贴,那个么您的存储库将指向旧项目。您需要首先删除SVN绑定,要做到这一点,您需要导出代码,如果您使用的是Ortoise SVN,那么这很容易。我使用了下面的命令来完成此操作,$svnadmin dump/var/www/SVN/project>project.dump,$svnadmin load/var/www/SVN/projectnew/trunck--parent dir trunksvn添加标记分支这将阻止“svn:E200009:无法添加所有目标,因为某些目标已版本化”