提交时Tortoise SVN显示工作副本已锁定错误

95

我使用Tortoise SVN在更新我的工作副本时,将更改提交到服务器的仓库。但是最近几天我无法提交更改,每当我尝试提交时都会出现以下错误。

Working copy 'C:\Program Files\EasyPHP\www\project\php' locked.
'C:\Program Files\EasyPHP\www\project' is already locked.
我尝试通过右键单击文件夹并选择 Tortoise SVN > Release lock 来解锁文件夹,但它显示:

这里没有需要解锁的内容。此工作副本中没有文件被锁定。

可能出现了什么问题?
10个回答

237

没问题... 试一下这个:

  • 进入SVN的顶层文件夹。
  • 右键点击包含你的svn文件的文件夹 > TortoiseSVN > CleanUp

这肯定会解决你的问题。我经常这样做... :)

注意,确保在清理对话框中选择"Break locks"选项。


谢谢@MicroEyes...现在我能够提交了。我只有一个小问题。在对文件进行更改后,我应该先提交再更新文件(在工作副本中),还是先更新再提交? - Anil
2
始终遵循先更新再提交的原则。否则,你会收到来自TortoiseSVN的更新提示,因为你的版本副本比存储在SVN服务器上的版本旧。所以无论如何,你都必须更新和提交。 - MicroEyes
1
是的,这解决了我更新当前副本到svn修订版的问题。 - Jayesh Bhoi
我刚刚在SVN中添加了文件并尝试提交,但是我遇到了相同的错误。我尝试了cleanUp命令,但无法解决这个问题。 - Ashok Chandrapal
我经常遇到这个问题。我能否减少svn显示此错误消息之前的时间(目前为五到十秒)?这样我就可以更早地开始清理工作了。 - not-a-user

15

接受的答案对我没有用。为了解决这个问题,我不得不右键单击被锁定的文件,选择repo-browser。这将打开一个弹出窗口,其中包含SVN服务器上的文件。然后我右键单击被锁定的文件,选择break lock

当我关闭仓库浏览器后,回到资源管理器,我终于可以提交了!


您只需要确保在清理对话框中选择了“打破锁定”选项。我认为它默认已经被选中了(这也是为什么原始答案中没有提到它的原因)。 - Nux

12
  1. 右键单击文件夹。
  2. TortoiseSVN->检查修改。
  3. 单击检查存储库按钮。
  4. 破解返回的所有文件的锁定状态。

3
我也遇到了这个问题。我想指出的是,如果它被锁定,请与您的团队联系。团队中的某个人可能会锁定一些内容,因为他们正在处理它(这使开发人员可以在其他人不会尝试处理相同内容的情况下处理工作)。如果是这种情况,释放锁定然后更新有可能会导致锁定它的开发人员丢失数据。
考虑到这一点,我的担忧是“清理”选项可能会改变我的工作副本或删除Subversion Repo级别的信息。事实并非如此。答案对我起了作用。当我在更新过程中点击取消时,我的副本变成了锁定状态。我最终拉了一些分支,但我不需要这些东西,所以我点击了取消。我的工作副本被锁定了。当我使用“释放锁定”命令时,我找不到任何文档显示为“已锁定”。这让我感到困惑,经过一些快速阅读(和这个线程),我尝试了“清理”命令。清理后,我的问题得到了解决,没有任何东西被锁定了。
来源:http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-locking.html

2

我不知道哪个文件被锁定了,所以我采取以下措施解决了这个问题:

  1. 进入最高级别的文件夹
  2. 点击清理并勾选清理方法中的--> 打破锁定

这对我起作用了。


2
SVN中的“lock”有多个含义,一些回答中涉及到“break lock”或队友持有锁定,这些并不是原问题所涉及的相关含义。该问题涉及到“工作副本锁定”(即完全局限于计算机上的工作副本,并且与你或队友在文件上持有锁定/签出无关)。MicroEyes给出的被接受的答案提到了正确的用法,当这种情况发生时,这是你最好的选择。
如果清理操作无效,则可能需要检出该项目的新工作副本。如果有任何已修改但未提交的文件,则需要将它们复制到新的工作副本中,以免丢失更改。
请参阅Tortoise SVN文档中的此页面,了解“lock”三种用法的描述:http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-locking.html 摘录如下(重点添加):
“Lock”的三种含义
在本节以及本书的几乎所有部分中,“lock”和“locking”这些词描述了一种相互排斥的机制,用于避免用户提交时的冲突。不幸的是,Subversion(版本控制软件)还需要考虑另外两种类型的“lock”。
第二种是“工作副本锁”,由Subversion内部使用,以防止多个Subversion客户端在同一个工作副本上操作时发生冲突。通常,当像更新/提交等命令由于错误而中断时,您会获得这些锁。可以通过在工作副本上运行清理命令来删除这些锁,如“清理”一节所述。
...

1
我曾尝试过各种方法,包括在较低的子目录上执行“清理”操作。最后,我尝试更新顶级文件夹。没有效果。然后我看到了“清理顶级文件夹”的提示。我尝试了一下。清理部分成功了,但锁定仍然存在。我的解决方案是返回顶级,进行清理,然后清理每个我可以进一步访问的红色(!)文件夹。清理完所有内容后,更新完美地完成了。 “打破锁定”提示也很好,但有一个例外情况,即您团队中的某些人可能会对某些事物进行合法锁定。

0

我在svn文件中不知道怎么锁定了自己 - 但是当我尝试(重新)获取锁定时(Tortoise显示文件的“获取锁定”选项),它抱怨已经有锁定。我尝试删除文件并提交目录更改 - 结果相同。我尝试了CleanUp(包括刷新覆盖),但也失败了。

解决方案是进入Tortoise repo-browser,找到文件并使用打破锁定功能。


0
如果这个(https://dev59.com/f2gt5IYBdhLWcg3w3xEw#11764922)没有帮助:检查是否有其他的SVN工具干扰了,然后关闭它。 我们在使用TortoiseSVN合并时遇到了几个小时的困难,并且出现了许多这样的锁定错误。最终我们发现Matlabs SVN集成正在干扰,关闭它后一切都解决了。

-1

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