是否可以在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将它们保存在历史记录中,这不是问题。重要的是解决事故。执行此操作的方法是恢复此提交所做的更改。使用以下命令:
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"。它会将你的工作副本更改为以前的版本,你只需要提交。
我想其他图形客户端也有相同的选项。
VCS系统是专门为使这尽可能复杂而设计的。您通常不希望这样做。
话虽如此,从官方文档中:
除在某些特殊情况下,您可能想要销毁文件的所有证据或提交。(也许有人不小心泄露了机密文件。)这并不容易,因为Subversion被故意设计为永远不会丢失信息。修订是建立在彼此之上的不可变的树。从历史记录中删除修订将导致多米诺骨牌效应,在所有后续修订中造成混乱,并可能使所有工作副本无效。
该项目计划有一天实现一个
svnadmin obliterate
命令,该命令将完成永久删除信息的任务。(见第516期)在此期间,您唯一的资源是
svnadmin dump
您的存储库,然后通过svndumpfilter
(不包括坏路径)将转储文件管道到svnadmin load
命令。关于这一点的详细信息,请参阅Subversion书籍的第5章。
http://subversion.apache.org/faq.html
您可以将主干移动到另一个分支(备份),并将正确的修订复制回主干
svn mv trunk https://svn_path/tags/trunk_broken
svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk
请注意,版本号将增加,所有更改将显示在svn日志中。
您可以创建当前存储库的转储,并跳过转储中的虚假修订。然后,您可以将转储文件加载到同一服务器或不同服务器上的新存储库中。
如果您没有真正的理由(例如空间不足)删除它,我建议保留该修订。