【问题标题】:SVN changing location of repositorySVN更改存储库的位置
【发布时间】:2011-08-04 22:27:57
【问题描述】:

这是我的问题:我在一个项目下创建了三个独立的存储库。存储库是“分支”、“主干”和“标签”。

所以我知道我需要删除它们并拥有一个存储库。我需要将主干下的所有内容移至项目中。所以我尝试远程执行此操作。首先我检查了项目,然后我删除了“分支”和“标签”,这两个都是空的。

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

cp -r trunk/* . 

现在我删除了主干:

svn delete trunk/

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

svn switch --relocate \
svn+ssh://fkim@.../home/fkim/svn/aetv/trunk \
svn+ssh://fkim@.../home/fkim/svn/aetv 

但这并没有改变这些文件的任何内容。当我执行 svn status 时,我看到他们有“?”在它们旁边,如果我尝试添加它们,我会被告知它们已经在版本控制之下。我该怎么办?我需要将它们全部放在远程服务器上的项目下。

请注意,我在 Linux 上运行一切。这是我在命令行中所做的工作。

【问题讨论】:

    标签: svn


    【解决方案1】:

    relocate 用于使工作副本指向另一个 URL,该 URL 也保存此工作副本的 repo(即当 SVN 服务器更改并且您不想删除工作副本并再次检查时)。

    您似乎想将新文件重新导入到空的存储库中。除了您的新文件仍被“标记”为工作副本的一部分。

    首先检查空的主干目录。这将创建一个空的工作副本。将旧工作副本复制到新工作副本,但删除所有 .svn 目录。这可以使用导出命令来完成。添加所有文件并提交以将它们导入 repo。

    【讨论】:

    • 这不是很好的解决方案,因为我们会丢失这些文件的所有历史记录
    • 我同意,但我认为这是 OP 想要的。如果他想从一个 repo 迁移到另一个 repo,他需要导出源 repo 并导入到目标 repo。但这不是他所做的。
    • 这对我来说似乎是最好的解决方案,因为这些文件没有历史记录。我刚刚添加了它们,所以通过将它们添加到一个空的仓库重新开始正是我想要的。谢谢。
    【解决方案2】:

    手动修改文件夹结构(受SVN控制)是非常危险的。

    现在您必须执行后续步骤:

    1. 再次检查您当前的项目(不要复制其中的任何内容!)

      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"
      

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 2013-08-25
        相关资源
        最近更新 更多