SVN工作副本有各种各样的数据库等问题

时间:2012-11-13 12:05:22

标签: svn tortoisesvn

我们在办公室的开发服务器上拥有三个网站的SVN工作副本。服务器WAS Linux,工作副本使用TortoiseSVN在Windows机器上工作并更新/提交等。我将通过说明我知道网络共享上的工作副本不受严格支持,但这是通过这种方式完成的,这样我们就可以在将它们放在实时服务器上之前在本地开发URL上测试我们对站点的代码更改。

这个WAS工作非常出色。没问题 - 直到我们的Linux服务器出现问题并且必须更换。我们已经用Mac取而代之的是杀死第二只拥有Mac内部用于浏览器测试的鸟。

自从将所有内容移至Mac后,SVN一直存在很大问题。提交/更新通常会因“数据库已锁定”错误而失败,并且我无法清理大部分时间,因为它通常会因此错误而失败:

清理无法处理以下路径: 通往网络WC的途径 数据库被锁定,执行语句'COMMIT TRANSACTION;'

正在执行的语句有所不同,有时与RELEASE有关。

我们正在制作的代码更改必须在我们的开发服务器上进行测试,然后才能在线提交到实时网站。就目前而言,我现在在自己的硬盘上检查了一份工作副本。我必须提交我的更改,在开发服务器上进行更新(并祈祷它工作 - 它采用AGES两种方式)并测试它们,然后更新实时服务器,如果它们工作。

我无法在网络共享上签出新的工作副本 - 再次,它通常会失败,抱怨磁盘I / O错误或数据库被锁定。我们已经禁用了所有Mac的省电功能,以防睡眠或硬盘spindown负责 - 没有运气。

如果可能,我希望将工作副本保留在网络共享上。正如我已经说过的那样,我意识到这不是最合适的SVN方式,但它一直在为我们工作。我该怎么做才能尝试解决这个问题?我怀疑它是Windows - > Mac网络相关,实际上有另一个问题,从我的机器到Mac网络共享的网络访问速度缓慢。

3 个答案:

答案 0 :(得分:2)

自SVN 1.7以来,SQLite被用作工作副本的数据库。正如File Locking And Concurrency In SQLite Version 3中所述:

  

SQLite使用POSIX顾问锁在Unix上实现锁定。上   Windows它使用LockFile(),LockFileEx()和UnlockFile()系统   调用。 SQLite假定这些系统调用都按照所宣传的方式工作。   如果不是这种情况,则可能导致数据库损坏。一   应该注意 POSIX咨询锁定已知是有缺陷甚至是   未实现许多NFS实现(包括最新版本)   Mac OS X)并且有关于锁定问题的报告   Windows下的网络文件系统。你最好的防守是不使用   SQLite用于网络文件系统上的文件。

这似乎是你的问题。您应该使用本地工作副本来避免问题。在开发过程中,您可能会获得额外的性能提升,因为文件I / O可能会降低。

关于部署服务器,您可以考虑使用TeamCityHudson等集成服务器,一旦正确配置,就可以自动在开发服务器上部署更改(例如,在每次提交时)

答案 1 :(得分:1)

当您更换服务器软件时,很可能更改了访问这些“网络共享”的方式。因此,您现在可能面临与事实相关的不同(更多)问题:通过网络共享访问svn签出无法可靠地运行。

但是为什么人们想要共享结账呢?在所有开发系统上单独签出并单独提交更改更有意义......

答案 2 :(得分:1)

已经回答了simillar问题here - Working copy XXX locked and cleanup failed in SVN

它可能不是理想的方法,但它可以帮助您解决锁定问题。

考虑每次都检查新目录,而不是用新的目录替换旧目录