使用assembla时如何将文件从repo root移动到trunk子目录

时间:2014-01-14 23:24:23

标签: svn

我在assembla创建了一个私有项目和一个存储库 但是我犯了一个错误,就是不遵守惯例和子目录 所以,现在repo根目录中有源文件 如何将它们移动到/ trunk subdir?

阅读此question,我看到我必须有shell访问才能运行svnadmin命令。
我试过绕过它们,并且成功地只获得了回购转储并创建了一个新的回购 我陷入了需要将转储加载到/ trunk目录的步骤 - 我只能将它再次加载到root中。

我发现svn move不是一个好选择,因为可能有一个案例想要返回旧版本,但由于我处于项目开发的早期阶段,它是我不太可能想这样做 我应该尝试svn move吗?如果是这样,我该怎么做? svn move ./ ./trunk/会做什么?

1 个答案:

答案 0 :(得分:5)

你有三种选择。

  1. 使用工作副本中的svn copy ^/ ^/trunk(^ /是简写 对于存储库的根目录)然后在每个上使用svn delete 你的root文件。这将保留您放置的属性 存储库根目录,例如svn:ignore。然后,您可以使用svn switch 将结帐移动到主干目录。如果你想 在您执行此操作之前检查历史记录,您必须结帐 旧版本中存储库的根目录,可能是 不方便(这是你对你可能不想要的原因的评论 使用移动)。此方法可能会失败,具体取决于httpd的版本 在服务器端(由于Apache httpd中已修复的错误)。此问题记录在此问题中:https://stackoverflow.com/questions/16019001/svn-create-top-level-directory-and-move-everything-from-root?rq=1

  2. 创建一个新的trunk目录,然后在每个目录上使用svn move 存储库根目录中的文件/目录。这不会保留 根目录中的任何属性,但为您节省了额外的费用 命令。然后,您可以使用svn switch将结帐移至 trunk目录,但由于新目录与新目录无关,因此在调用switch时必须使用--ignore-ancesstry。如果您想要查看历史记录 在你这样做之前,你必须检查出根 旧版本的存储库,这可能不方便(这是 您对可能不想使用移动的原因的评论。此现有问题中记录了此方法:How to create trunk directory in existing svn repo without a trunk, and move all files to new trunk?

  3. 转储您的存储库。使用svnadmin load加载存储库时 请务必使用--ignore-uuid--parent-dir trunk。现有的结账将不再存在 是可用的,你将不得不创建新的结帐。你会的 只用一个简单的svn update -r $REV在历史中移动 因为所有的历史将在你的行李箱中(除了任何历史 你可能会做的分支)。此问题记录在此问题中:Is there a clean way to move / to /trunk?

  4. 你使用的是真的由你决定。如你所见,有一些权衡。前两个并没有那么不同。第三个更痛苦。我想这取决于是否有其他开发人员通过打破他们的结帐会给您带来不便。如果只是你,那么我会继续选择第3个选项。