2011-08-04 67 views
1

这是我的问题:我在一个项目下创建了三个单独的回购站。回购是“分支”和“主干”和“标签”。SVN更改版本库的位置

所以我知道我需要删除它们并拥有一个存储库。我需要把所有东西都放到项目中。所以我试图远程做到这一点。首先我检查了项目,然后删除了“分支”和“标签”,这两个都是空的。

我做了一个svn删除,然后提交。接下来我想摆脱后备箱,但它已经保存了文件。所以我所做的是我复制这些文件到目录上面:

cp -r trunk/* . 

现在我删除后车厢:

svn delete trunk/ 

好了,现在该项目是空后,我做了承诺。但是我仍然拥有那些从主干中复制出来的重要文件。我想把它们放在远程服务器上的项目下,所以我只有一个存放这些文件的存储库。但是这些本地文件仍然认为它们属于被删除的主干存储库。于是我发出这个命令,我希望它能修复它们:

svn switch --relocate \ 
svn+ssh://[email protected]/home/fkim/svn/aetv/trunk \ 
svn+ssh://[email protected]/home/fkim/svn/aetv 

但是这并没有改变这些文件的任何内容。当我做svn身份时,我看到他们有'?'在他们旁边,如果我尝试添加它们,我被告知他们已经受版本控制。我该怎么办?我需要将它们都放在远程服务器上的项目下。

请注意,我正在Linux上运行所有的东西。这是我在命令行上做的工作。

回答

2

relocate用于将工作副本指向另一个URL,该URL还包含此工作副本的回购(即,当SVN服务器发生更改并且您不想删除工作副本并再次检出时) 。

您似乎想要将新文件重新导入空回购。除了您的新文件仍被标记为工作副本的一部分。

首先检查空箱子目录。这将创建一个空的工作副本。将旧的工作副本复制到新的工作副本,但删除所有.svn目录。这可以使用export命令完成。添加所有文件并提交将其导入回购。

+0

这不是一个很好的解决方案,因为我们将放弃这些文件的所有历史记录 – Rost

+0

我同意,但我的印象是这是OP想要的。如果他想从一个回购移植到另一个回购,他需要导出源回购并导入目标回购。但那不是他所做的。 –

+0

这对我来说似乎是最好的解决方案,因为这些文件没有历史记录。我刚刚添加了它们,因此将它们添加到空的回购库中正是我想要的。谢谢。 – sqlman

0

在你的本地工作文件夹上,使用TortoiseSVN选择“导出”来修剪所有svn的东西。然后提交你的本地文件夹到另一个仓库。这能解决你的问题吗?

1

手动修改文件夹结构(在SVN控制下)非常危险。

现在你要做的下一步骤:

  1. Checkout的电流再次(项目不要复制里面的东西!)

    svn co http://your/project/svn/ 
    
  2. 还原躯干:

    svn merge -rHEAD:PREV . 
    svn ci -m "Trunk restored" 
    
  3. 移动躯干内容:

    svn mv trunk/* . 
    svn ci -m "Trunk contents moved up" 
    
  4. 删除主干:

    svn del trunk 
    svn ci -m "Trunk deleted"