SVN经常提示文件在另一个工作副本中被我锁定

15

我有一个托管在Dreamhost上的SVN代码仓库,对二进制文件设置了needs-lock。有时,在提交由我锁定并修改的文件时,会出现提交失败的错误:

Error: Commit failed (details follow):
Error: File '/my/file.bin' is locked in
Error:  another working copy

如果我尝试获取该文件的锁定(而不是窃取它),它会显示:

Error: Path '/my/file.bin' is already locked by user
Error:  'my_username' in filesystem '/home/user1/svn/repo1/db'
清理没有帮助,所以解决这个问题的唯一方法就是窃取锁定,并且提交成功。
这不是一个关键问题,但当它发生在一个长时间提交的中间时,真的很烦人。 我倾向于认为这是客户端或服务器的错误导致的,因为我确定我没有使用其他工作副本,并且该问题经常发生(最近两天内发生了3次),影响我和我的同事在代码库中的使用。
我们正在使用 TortoiseSVN 1.8.4,而 Dreamhost svn 服务器是 1.6.12。
感谢任何帮助。
更新:我注意到如果在提交前更新工作副本,就会出现此错误(没有错误并且不会修改锁定文件)。通过检查文件状态,在更新之前Tortoise说它被我锁定(仅在本地检查),而在更新后仅在本地检查时它给出“?”作为锁定状态,并且通过检查服务器然后说它被我锁定。在更新后,该文件变为只读(因为需要锁定) ,即使它仍标记为已修改。因此,操作序列为:锁定 file.bin-> 修改 file.bin-> 更新整个工作副本-> 提交-> 提交失败的错误。在更新后,工作副本似乎忘记了锁定状态,当它询问服务器时,它认为它被另一个工作副本锁定。
5个回答

46
在Windows上,我通过以下步骤解决了问题: 1. 点击菜单中的“Repo-browser”启动仓库浏览器。 2. 定位锁定的文件。 3. 在锁定的文件上右键单击鼠标。 4. 点击“break lock”。

3
清理操作无法解决问题。该操作用于处理工作副本锁定,而您遇到的是文件在仓库本身中被锁定以实现用户间互斥的问题。详见“Lock”的三种含义
您可能拥有一个客户端,在不同的工作副本中(本地或服务器上的工作副本)为您锁定了该文件(或文件),或者您挂载了一个 WebDAV 共享并在此处打开了该文件(或文件),从而导致创建了锁。

谢谢您的快速回复,我会检查您指出的可能问题。然而,我想澄清的是,问题只发生在我成功锁定文件后。导致错误的典型操作序列是:锁定 file.bin -> 修改 file.bin -> 提交 file.bin -> 提交失败错误。 - cmant
我会质疑您的工作副本是否正确记录了锁定状态。当您获取锁定后运行 svn status 时会发生什么?在获取锁定时是否收到任何错误消息? - alroc
除了提交时出现“已锁定”之外,我没有收到任何错误。在服务器上,我们只有使用存储库的 trac,我们将尝试禁用它。无论如何,我发现这个错误似乎只会在更新后发生(请参见原始问题更新)。 - cmant
这听起来像是你的某个地方出现了损坏。你是否在存储库上运行了svnadmin verify并尝试了一个新的工作副本检出? - alroc

2

如果使用JetBrains IDE:

右键单击要解锁的文件,选择Subversion,并点击lock

然后选中steal existing lock复选框,并应用OK

再次右键单击该文件,选择Subversion,并点击unlock

如果使用命令行:

使用--force选项锁定文件

svn lock --force path/to/file.ext

并再次解锁它。
svn unlock path/to/file.ext

2
我也遇到了同样的问题,并发现在三台机器中,其中一台机器上我锁定了文件,因此我也遇到了问题。 我所做的是从那台机器释放锁并继续进行。
或者,首先窃取锁,然后开始工作,因为这是SVN提供的最佳选项。

0

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