【问题标题】:SVN Revert Trunk, remove a revision as if it never existed?SVN Revert Trunk,删除一个修订版,就好像它从未存在过一样?
【发布时间】:2011-11-04 08:55:18
【问题描述】:

是否可以在 svn 服务器中删除一个修订版,就好像它从未存在过一样?

所以我们有以下修改:

1004 // Commit of some bogus code that broke the build and was just wrong
1003 // Change 1.2
1002 // Change 1.1
1001
1000 *** Initial checkin

我们可以把 svn 中的 1004 去掉,然后恢复到 1003,就好像 1004 不存在一样吗?

原谅我的无知,我还在学习如何使用 SVN。

【问题讨论】:

    标签: svn revision revert svn-trunk


    【解决方案1】:

    这些事故发生了,如果 SVN 将它们保留在其历史记录中,这不是问题。重要的是修复事故。这样做的方法是还原此提交所做的更改。使用以下命令:

    svn merge -r [current_version]:[previous_version] [repository_url]
    svn commit -m “Reverting previous commit and going back to revision [previous_version].”
    

    如果你使用 TortoiseSVN,你可以只显示日志,选择提交,然后在上下文菜单中选择“Revert changes from this revision”。它会将您的工作副本更改为以前的版本,您只需提交即可。

    我猜其他图形客户端也有同样的选择。

    【讨论】:

    • 您好 JB,感谢您的建议,这就是我想做的,但是我已经给了 Martin 正确的答案,因为它回答了我最初的问题。我试过这个,但我破坏的构建是许多东西的复合合并,它似乎不起作用。最后我不得不求助于更多的手动措施。我认为对于不太复杂的回归,这将是一个理想的解决方案(问题示例是对我的问题的过度简化)。谢谢。
    【解决方案2】:

    VCS 系统经过专门设计,可使其尽可能复杂。你通常不想这样做。

    话虽如此,来自官方文档:

    在某些特殊情况下,您可能希望销毁文件或提交的所有证据。 (也许有人不小心提交了一份机密文件。)这并不容易,因为 Subversion 被刻意设计为永远不会丢失信息。修订是相互依赖的不可变树。从历史中删除修订会导致多米诺骨牌效应,在所有后续修订中造成混乱,并可能使所有工作副本无效。

    然而,该项目计划在某一天实施svnadmin obliterate 命令,该命令将完成永久删除信息的任务。 (见issue 516。)

    与此同时,您唯一的办法是访问您的存储库svnadmin dump,然后通过svndumpfilter(不包括错误路径)将转储文件传送到svnadmin load 命令。有关详细信息,请参阅 Subversion 书籍的chapter 5

    http://subversion.apache.org/faq.html#removal

    【讨论】:

    • 太好了,感谢您提供的信息,对于我要解决的问题,这听起来比它值得做的更多。我想我需要进行更新,在单独的文件夹中签出我需要角色的修订。通过我签出的中继代码导出这些文件,解决任何问题并重新签入。
    • 虽然不是最干净的解决方案
    • @Mantisimo:Martin 给出了这个答案,因为您要求“删除修订版好像它从未存在过”。他的想法是这样的:它甚至不应该出现在日志历史中。如果这就是你想要的,那么他的答案就是正确的。如果您只想撤消提交,那么我的解决方案是正确的。
    • 如果这是最新版本并且这个问题是使用 svnsync 创建 svn 镜像的一部分,那么就有希望了。根据subversion.1072662.n5.nabble.com/… 删除 /your_repo_location/db/revs/[rev#] 删除 /your_repo_location/db/revprops/[rev#] 将 /your_repo_location/db/current 中的 rev# 更改回 [rev#-1]
    【解决方案3】:

    您可以将主干移动到另一个分支(备份)并将正确的修订复制回主干

    svn mv trunk https://svn_path/tags/trunk_broken
    svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk
    

    请注意修订号会增加,所有更改都会显示在 svn 日志中。

    【讨论】:

      【解决方案4】:

      您可以创建当前存储库的转储并跳过转储中的虚假修订。然后,您可以将转储加载到同一服务器或不同服务器上的新存储库。

      【讨论】:

        【解决方案5】:

        如果您没有真正的理由(例如空间不足)来删除它,我建议您离开修订版。这是 SVN 服务器的主要工作,保持变化。

        【讨论】:

        • 这只是您的建议观察,但它并没有特别回答实际问题
        猜你喜欢
        • 1970-01-01
        • 2021-04-14
        • 2012-02-13
        • 2011-04-22
        • 2011-02-13
        • 2012-11-29
        • 2023-04-03
        • 1970-01-01
        • 2016-03-16
        相关资源
        最近更新 更多