【问题标题】:SVN creating trunk directory on existing repositorySVN 在现有存储库上创建主干目录
【发布时间】:2010-09-25 15:09:51
【问题描述】:

我正在做一个没有主干/分支/标签目录结构的项目 - 即。一切都在 svn repo 的根目录中。

我想在根目录下创建一个trunk目录,把根目录下的所有东西都移到新的trunk目录下。

最好的方法是什么?

我首先考虑的是

svn mkdir trunk
(for each file or directory that is not called trunk: )
svn mv FILEorDIR trunk/

但这有效地删除了每个文件,然后再次添加它。有没有更好的办法?

谢谢。

【问题讨论】:

    标签: svn


    【解决方案1】:

    在浏览了几个不同的页面(包括这一页)后,我遇到了完全相同的问题并解决了它。这是我的解决方案:

    注意:在开始之前,如果您打算使用 svn switch 来保留您的工作副本并避免再次签出 repo,最好确保您的工作副本是最新的并且没有未提交的更改。

    解决方案...

    //REPO_URL = The URL for the repo on the SVN server.
    //In my case it was https://IP_ADDRESS:PORT/svn/my_repo
    
    //Make the trunk dir in the root of your SVN repo
    svn mkdir REPO_URL/trunk -m "making trunk dir"
    
    //Move everything from your root dir to your new trunk dir
    svn move REPO_URL/A_FOLDER REPO_URL/trunk/A_FOLDER -m "moving folders to trunk"
    svn move REPO_URL/ANOTHER_FOLDER REPO_URL/trunk/ANOTHER_FOLDER -m "blah"
    svn move REPO_URL/A_FILE.TXT REPO_URL/trunk/A_FILE.TXT -m "moving files to trunk"
    //Keep going until you've moved everything from your root dir to the trunk dir...
    

    所以现在,在您的 SVN 服务器上,所有内容都在 trunk 文件夹中。甜蜜!

    但我的 repo 是 60GB 并且在远程服务器上。我宁愿不再检查。 svn switch 将让您将现有的工作副本指向新的 trunk 目录,以便您可以继续使用您拥有的副本。进入工作副本的根文件夹并运行svn switch REPO_URL/trunk --ignore-ancestry。它应该说At revision X,其中X 是将所有文件从根目录移动到主干目录后的修订版。而已!也许做一个 SVN 更新以获得更好的效果:)

    【讨论】:

    • 似乎比被选中的答案更好
    【解决方案2】:

    这与我过去的做法类似。您的解决方案实际上复制每个文件,然后删除原始文件。由于 Subversion 实现副本的方式,每个文件的历史都会被保留。

    完成此操作后,您可以使用 svn switch 将现有结帐指向新位置。

    【讨论】:

    • 你能给出svn switch的确切命令吗?另外,有没有办法强制切换不更新到运行它的工作副本中的最新版本?
    • @Vijay Dev:我推荐svn switch documentation 了解全部详情。
    【解决方案3】:

    如果您使用 Eclipse IDE 和 Subclipse for SVN,那么您可以继续在 SVN 中创建文件夹并将所有文件/目录从根目录移动到主干目录,然后将 ProjectName/trunk 签出到您的 Eclipse 工作区...

    【讨论】:

    • 另外,如果您打算复制到一个干净的存储库(一个没有签入任何项目的存储库,因此它没有主干/分支/标签结构),您可以在 Eclipse 中创建Repo>New>Project Structure...>Monolithic 的树干/分支/标签结构。之后,只需复制/粘贴源代码库中的所有元素。
    【解决方案4】:

    旧帖子,但我也有同样的问题,我的所有回购都在根目录中而不是在树干中。这在尝试简单的git svn clone 命令时会出现问题。经过数小时的反复试验,这很简单:

    git svn clone --username byname http://www.MySVNserver.com:81/repos/project1 --no-metadata --trunk=.

    【讨论】:

      【解决方案5】:

      我自己做了几次并学到了这一点:如果你想保留以前的 SVN 根目录的历史记录 + 保留所有 SVN 属性(如 ignore),你必须按照以下方式进行。 注意:我用 TortoiseSVN 完成了这一切,因为这种方式非常简单。但是您也可能在命令行上取得了成功。您还可以在下面找到使用 CLI 执行此操作的说明。

      不要忘记在每个操作中添加适当的 SVN 消息,这样您以后就可以清楚地知道已经完成了什么。

      示例代码库:/svn/my_project

      TortoiseSVN的步骤:

      1. 重命名 当前项目目录/svn/my_project 到主干/svn/trunk
      2. 创建一个新目录/svn/my_project
      3. 移动 /svn/trunk/svn/my_project
      4. 切换 工作副本到新路径。勾选“英戈尔血统”复选框。
      5. 放松

      CLI 的步骤(未经测试!):

      1. 复制目录到一个新目录/svn/trunk/
      2. 删除旧目录/svn/my_project/
      3. 复制 /svn/trunk/ 目录到新目录 /svn/my_project/trunk
      4. 删除/svn/trunk/ 目录
      5. 切换工作副本到新目录

      【讨论】:

        【解决方案6】:

        您可能需要查看 svnadmin 工具。

        老实说,我以前没有尝试过,您可能会从尝试过的人那里得到答案,但您可以通过以下方式工作:

        您应该能够初始化一个新的存储库,在其中创建一个“主干”目录,然后将您以前的存储库转储到“主干”中。

        【讨论】:

          【解决方案7】:

          这里给出使用svn+ssh方法在unix终端的svn根目录下创建trunk文件夹的方法。 "projectname" 是在 svn 中创建项目时的根 "Identifier":

          svn mkdir svn+ssh://username@host/projectname/trunk -m "Create the trunk folder"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-09
            • 2021-12-18
            • 1970-01-01
            • 1970-01-01
            • 2012-07-10
            相关资源
            最近更新 更多