【问题标题】:SVN working copy has all sorts of database etc. problemsSVN工作副本有各种数据库等问题
【发布时间】:2012-11-13 12:05:21
【问题描述】:

我们在办公室的开发服务器上保存了三个网站的 SVN 工作副本。服务器 WAS Linux,工作副本在 Windows 机器上工作,并使用 TortoiseSVN 更新/提交等。我会先说我知道网络共享上的工作副本不受严格支持,但这样做是为了在将它们放到实时服务器上之前,我们可以在本地开发 URL 上离线测试我们对站点的代码更改。

这非常出色。完全没有问题 - 直到我们的 Linux 服务器出现问题并不得不更换。我们已将其替换为 Mac,以扼杀在内部使用 Mac 进行浏览器测试的第二只鸟。

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

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

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

我们所做的代码更改必须在我们的开发服务器上进行测试,然后才能在线提交到实时站点。就目前而言,我现在在自己的硬盘上签出了一份工作副本。我必须提交我的更改,在开发服务器上进行更新(并祈祷它可以正常工作 - 无论哪种方式都需要 AGES)并测试它们,然后在它们工作时更新实时服务器。

我也无法在网络共享上签出新的工作副本——同样,它通常会因为磁盘 I/O 错误或数据库被锁定而失败。我们已经禁用了 Mac 的所有省电功能,以防睡眠或硬盘停止运转 - 运气不好。

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

【问题讨论】:

    标签: svn tortoisesvn


    【解决方案1】:

    从 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 之类的集成服务器,一旦正确配置就可以将您的更改自动部署到您的开发服务器上(例如,在每次提交时)。

    【讨论】:

    • 这听起来很像问题。应该留在 Linux 上! :)
    【解决方案2】:

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

    但是,为什么要进行共享结账呢?对所有开发系统进行单独检查并单独提交更改更有意义...

    【讨论】:

    • 我是这个办公室中唯一使用代码的开发人员。伦敦的另一个办公室也从实时服务器中签出,但他们没有开发服务器来测试——他们倾向于进行小规模的调整,而我做所有的大工作。所以这个办公室里没有其他人分享我的工作副本——它只是在网络上用于站点测试目的。
    • 然后反过来做:签出到您的本地工作站(svn 访问工作的地方,因为它是一个本机文件系统)并将该签出导出到测试服务器。出于测试目的的访问通过网络共享访问结帐没有问题,因为它不是 svn 访问(我假设...)。
    • 我必须承认我以前没有研究过导出选项。这会简单地将文件复制到网络驱动器,以便我可以在提交之前测试它们吗?听起来它可以工作。我试试看。
    • 不不不!对不起,这是一个误解。 “导出”是指文件系统导出。因此,您将您的开发工作站设置为文件系统服务器(SMB 或 NFS 或其他),并将导出的共享安装在您用于测试的 MAC 服务器上。
    • 很高兴能提供帮助。这是我不喜欢这个论坛的一件事:太多的用户给出一个一次性的答案来获得积分(为了什么?!?)就是这样。
    【解决方案3】:

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

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

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

    【讨论】:

    • 我会尝试那里的步骤,谢谢。怀疑在创建新的工作副本时我可能仍然会遇到锁/I/O 问题,但我们会看看会发生什么。
    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2023-04-09
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多