SVN仓库如何变得损坏?

15

我已经遇到过几次情况,其中一个 SVN 仓库损坏了,我们在不知道自己所做的事情的情况下无法对项目的某些版本或分支进行任何操作。因此,我想知道是什么导致了仓库损坏?


似乎客户端之间的不兼容性可能会引起问题,特别是与字符集有关。


你没有在网络上使用 file:/// 访问,是吗? - Bert Huijben
相当多,我们处于一个非常异构的环境中。 - Loki
7个回答

12

基本上有三种不同的情况:

  1. 硬件故障(内存、文件系统损坏等)。
  2. 具有登录访问服务器权限的用户可能会损坏仓库文件。
  3. Subversion中的漏洞。

通常情况下,除了最明显的情况外,很难发现故障硬件。通过限制对服务器的登录访问,可以避免第2种情况。 所有其他问题 都是Subversion中的错误。(包括客户端和服务器之间的兼容性问题)。在我的看法中,您应该永远不能仅通过使用Subversion客户端就损坏仓库(即使客户端存在漏洞)。


1
我会非常惊讶地看到Subversion中出现这样的错误。它的开发目标是确保在最终版本中不会因为错误而导致数据丢失。 - Hardcoded
6
如果Subversion没有存在一些潜伏在某个黑暗角落的漏洞,我会感到非常惊讶。每个软件都有许多可能非常严重的漏洞,问题只是在什么情况下它会显露出来。 - JesperE
我有一个脚本,每两分钟在一个大型代码库上执行一次svn更新。这比我们通常的更新频率高100倍到1000倍。它似乎每隔几周就会出现损坏。因此,我认为这是SVN中的一个错误。 - Elliott Beach

4
潜在的文件系统损坏或有人在操作内部 svn 目录?

3

硬件出现故障的可能性总是存在的。例如,内存中的位错误可能会导致静默损坏而不是仅仅使计算机崩溃;如果svn服务器进程受到影响,则存储库可能会损坏。


2

如果仓库不在svn服务器的本地磁盘上,而是在NFS上,则使用伯克利数据库格式可能会导致仓库损坏。在svn 1.5中,FSFS成为新仓库的默认格式 - 它可以很好地在非锁定文件系统(如NFS)上运行。


0
我遇到过几次这种情况。如果客户端在服务器执行某些操作时离开,SVN似乎无法很好地处理。我不知道具体细节,但我曾经对我认为是只读进程进行了一些kill -9操作,结果后来不得不运行svnadmin cleanup才能使服务器再次响应。

1
在svn中没有只读进程;即使是更新,它也总是创建一个事务。有关详细信息,请参见http://svnbook.red-bean.com/en/1.0/ch05.html#svn-ch-5-sect-1.1。 - CesarB
2
svnadmin 没有清理命令。svn cleanup 是客户端命令。除了 file:/// 存储库访问外,在所有情况下,客户端崩溃/挂起都不会损害服务器或数据。而通过网络进行 file:/// 访问绝对不是推荐的做法。 - Bert Huijben
@Bert:哎呀,我是说 svnadmin recover。 - user42092

0

这在基于 file:// 的版本库中非常普遍,然而如果只有单个用户/服务访问版本库,则不会发生这种情况。


请您能否详细说明一下? - Loki
我想我知道你的意思。如果使用类似Windows共享之类的东西,请确保只有一个用户在上面。 - Loki

0
我曾遇到一次仓库损坏,花了我一段时间才找出原因。我在服务器上不小心将仓库中的 .svn 目录所有者更改为某个无关的用户。此后 SVN 给出了损坏错误,直到我删除并重新创建仓库才解决了问题。即使我纠正了它,仍然存在问题。 拍了拍额头

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接