14

是否可以在 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。

4

5 回答 5

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,你可以只显示日志,选择提交,然后在上下文菜单中选择“Revert changes from this revision”。它会将您的工作副本更改为以前的版本,您只需提交即可。

我猜其他图形客户端也有相同的选项。

于 2011-08-26T09:29:26.177 回答
15

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

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

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

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

与此同时,您唯一的办法是访问svnadmin dump您的存储库,然后将转储文件svndumpfilter(不包括错误路径)通过管道传输到svnadmin load命令中。有关这方面的详细信息,请参阅Subversion 手册的第 5 章。

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

于 2011-08-26T09:13:20.093 回答
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 日志中。

于 2013-05-08T10:47:31.217 回答
0

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

于 2011-08-29T00:24:58.270 回答
0

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

于 2013-12-20T08:37:47.230 回答