【问题标题】:How do I correct a Subversion project where I omitted trunk?如何更正省略了主干的 Subversion 项目?
【发布时间】:2009-01-30 18:52:49
【问题描述】:

我有一个颠覆项目,叫做 inboundem。这是我的第一个,当我创建它时,我省略了主干。我需要将它作为 inboundem/trunk 放入正确的结构中。我有另一个这样的项目,但由于没有修改,我做了svn delete,然后svn import,效果很好。但是我有很多关于 inboundem 的修改,我不想丢失历史记录。

我不能做svn move,因为 svn 不会让我将一个项目移入它自己。

我怀疑我需要走下 svnadmin 转储/加载路径,所以我做了:

svnadmin dump /subversion/active | svndumpfilter include inboundem > inboundem.dump

这已经创建了一个转储文件,其中包含我所有的 inboundem 历史记录。但是我现在该怎么办?

我怀疑我应该做svn delete并删除项目,然后手动编辑转储文件并将Node-path从inboundem更改为inboundem/trunk,然后再做

svnadmin load /subversion/active < inboundem.dump

这样安全吗?有没有更简单的方法?也许我应该只是暴力破解它,并将所有修订一一检查,删除项目,然后逐个修订重新创建项目修订。

【问题讨论】:

    标签: svn


    【解决方案1】:
    svn mv svn://repo/inboundem svn://repo/trunk
    svn mkdir svn://repo/inboundem
    svn mv svn://repo/trunk svn://repo/inboundem/trunk
    

    【讨论】:

    • 这比我的解决方案更简单。
    • 它保留了历史。
    • 是的。我自己必须不止一次这样做。
    • 我收到一个错误,说明源和目标不是同一个 repo。我最终将/ 分支到/trunk,这给我留下了两个分支,然后我删除了/ 下面的所有内容,除了/trunk 文件夹,它给我留下了正确的文件夹布局。我看到的唯一“问题”是/ 文件夹仍然有历史记录,但这对我们来说没问题。
    • 如果我使用这个解决方案,会不会弄乱其他人签出的项目副本?
    【解决方案2】:

    为什么不在项目根目录中创建一个名为“trunk”的文件夹,然后将根目录中的所有文件/文件夹移动到该文件夹​​中?

    我以前在 Tortoise 中做过这个,我不确定它使用什么底层命令,因为你说 svn move 对你不起作用。也许尝试复制然后删除?

    【讨论】:

    • 因为它会复制 .svn 文件夹并严重破坏 SVN
    • 啊,肯定有办法告诉命令行客户端忽略.svn。我不知道你使用的是什么操作系统,但是 Tortoise 会让你在存储库查看器中做一个简单的拖放来完成这个任务。
    • 右拖动移动文件夹(如果您使用的是 TortoiseSVN)。当您在右键拖动后松开鼠标按钮时,选择“SVN 将项目移动到此处”这将执行“svn mv”而不是仅资源管理器移动。
    • 哦,Stefan 真是个好把戏。我通常只是通过回购浏览功能来做到这一点。
    【解决方案3】:

    您可以使用 svn export,然后将导出的源移动到 /trunk,然后提交更改(在 /trunk 中添加新文件夹)

    然后在旧文件夹上删除(并调用删除),如果需要,仍然会有它们的历史供您恢复,但它将它们恢复到旧文件夹,而不是新主干。 svn export 所做的只是将所选目录移动到没有 .svn 文件夹的新位置,这样它就好像它不是工作副本一样,然后您可以从那里将其添加到工作副本中。

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2010-11-22
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多