【问题标题】:SVN revert on server sideSVN 在服务器端恢复
【发布时间】:2012-02-21 11:22:35
【问题描述】:

一位非常聪明的开发人员几乎删除了整个存储库并将其提交(rev 210)。我的电脑上有一个工作副本,但存储库相当大。

我想创建一个与上一个好的版本 (209) 相同的新版本 (211)。我不想保留修订版 210 中的任何内容,这是错误的提交。这是开发人员的错,就我而言,他们将不得不重写任何内容。

想法?

【问题讨论】:

  • 删除文件(或整个存储库)然后提交不会导致任何内容丢失。这就是版本控制系统的全部意义所在,如果你犯了错误,它可以防止你永远失去东西。

标签: svn commit revert


【解决方案1】:

这个可以通过reverse-merging解决:

以下命令会将您的工作副本返回到修订版 209 的状态:

svn merge -c -210 .

然后提交:

svn ci -m "reverse merged revision 210"

【讨论】:

    【解决方案2】:

    如果该开发人员没有删除服务器上的存储库,那么您的所有代码都是安全的。验证这一点所需要做的就是创建一个新的空文件夹,然后从修订版 209 而不是 HEAD 执行 SVN 签出。这将为您提供版本 209 的每个文件。您可以在任何开发工作站上执行此操作,无需在服务器上执行任何操作。

    要恢复更改,只需在工作副本根目录中打开 SVN 显示日志(如果使用 TSVN)窗口并选择修订版 209,然后选择恢复到修订版 - 这将反向合并修订版 210 中的更改然后您可以将其签入为修订版 211。这应该可以解决您的问题。

    如果开发者删除了您的 SVN 服务器上的存储库,您需要每日备份来恢复您的代码。

    只要服务器上的存储库完好无损,就无法从 SVN 中删除任何内容。当您删除某些内容时,从那时起它就变得不可见,但您始终可以返回到存储库中任何文件的任何版本 - 您只需要转到正确的修订版。

    【讨论】:

    • 谢谢。这解决了问题。非常感激。我知道代码是安全的,我了解 SVN 的那部分。我只是想创建一个与 209 完全相同的新修订版 (211)。非常感谢!
    • @ScottCrooks 很高兴它有帮助。在这种情况下你介意接受我的回答吗?
    • 为我工作,但你必须先签出头,然后恢复到修订等等......
    【解决方案3】:

    有一种丑陋的方式对我有用……前提是您要删除最后一次提交而不是中间的某个提交。

    首先 - 关闭 svn 服务器并通过 svnadmin hotcopy repo repo_backup 备份你的仓库

    转到 SVN 服务器并继续您的 repo。查看 ./db/revs/X/ 其中 X 是错误提交的第一个数字。您可以在那里看到错误的提交文件(例如 123)。删除此文件,然后修改 ./db/current 以指向之前的提交(例如 122)。

    【讨论】:

    • 魅力十足!
    【解决方案4】:

    如果您使用的是 tortoise SVN,请稍微修改已接受的答案

    1. 更新到最新版本在这种情况下,版本:210
    2. 打开回购日志
    3. 选择在这种情况下必须强制的修订:209
    4. 选择恢复到此版本
    5. 然后将更改提交为新的提交版本:211

    【讨论】:

      【解决方案5】:

      Linux 机器上的基本方法是:

      cp PRJ ../../bkup
      svn up PRJ
      cp ../../bkup PRJ
      cd PRJ
      svn add *
      svn ci -m "everything again" PRJ 
      

      希望你明白了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 2018-10-26
        • 1970-01-01
        相关资源
        最近更新 更多