是否可以在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。
答案 0 :(得分:27)
这些事故很明显,如果SVN将它们保留在历史中,这不是问题。重要的是修复事故。执行此操作的方法是还原此提交所做的更改。使用以下命令:
svn merge -r [current_version]:[previous_version] [repository_url]
svn commit -m “Reverting previous commit and going back to revision [previous_version].”
如果您正在使用TortoiseSVN,则只需显示日志,选择提交,然后在上下文菜单中选择“从此修订版还原更改”。它会将您的工作副本更改为以前的版本,您只需要提交。
我猜其他图形客户端也有相同的选择。
答案 1 :(得分:15)
VCS系统专门设计用于使其尽可能复杂。你通常不想这样做。
话虽如此,来自官方文件:
在某些特殊情况下,您可能希望销毁文件或提交的所有证据。 (也许有人意外地提交了一份机密文件。)这并不容易,因为Subversion是故意设计的,永远不会丢失信息。修订是不可变的树,彼此建立在一起。从历史记录中删除修订版会导致多米诺骨牌效应,在所有后续版本中造成混乱,并可能使所有工作副本无效。
然而,该项目计划有朝一日实施
svnadmin obliterate
命令,该命令将完成永久删除信息的任务。 (见issue 516。)与此同时,您唯一的办法是
svnadmin dump
您的存储库,然后通过svndumpfilter
(不包括错误路径)将转储文件传输到svnadmin load
命令。有关详细信息,请参阅Subversion手册的chapter 5。
答案 2 :(得分:4)
您可以将中继移动到另一个分支(备份)并将正确的修订复制回主干
svn mv trunk https://svn_path/tags/trunk_broken
svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk
请注意,修订号将增加,所有更改将显示在svn log中。
答案 3 :(得分:0)
您可以创建当前存储库的转储并跳过转储中的伪版本。然后,您可以将转储装载到同一服务器上或另一个服务器上的新存储库中。
答案 4 :(得分:0)
如果您没有真正的原因(例如空间短缺),我建议您将其删除。这是SVN服务器的主要工作,可以保持更改。