为什么我一直收到“SVN:工作副本XXXX已锁定;尝试执行'cleanup'”的提示?

45
如果你之前在Eclipse(Subversion, subversive)中使用过SVN工具,那么你很可能熟悉“工作副本XXX已锁定...”错误。我在以下链接找到了一个非常有用的文章,提供了解决这个问题的方法:Working copy XXX locked and cleanup failed in SVN。尽管这个解决方法很好,但要一遍又一遍地执行它真的很麻烦。有没有人知道为什么我一直会出现这个错误,并且我可以采取哪些步骤来防止它发生?背景:我正在创建一个Eclipse插件,涉及监听SVN事件,因此在测试这个插件时,我不断地打开和关闭工作区。每次打开工作区时,我通常都会进行1或2次提交。偶尔提交会失败,我就会得到“工作副本已锁定”的错误。我希望不再出现这个错误,所以欢迎任何建议。谢谢!

你能否在不进行Team -> Cleanup的情况下解决这个问题?我不希望我的用户不断地进行刷新/清理操作... - Chris Bolton
11个回答

81
  1. 选择项目
  2. 在选择的项目上右键单击
  3. 团队 -> 清理

问题解决。

注意:以上步骤仅适用于Eclipse(Indigo包)。


谢谢。清理绝对有帮助。 - rickygrimes
2
它也可以在Eclipse Luna上运行...感谢提示。 - CanC
1
曾经为Luna Service Release 1 (4.4.1)工作过。 - Murat Yıldız
它适用于Android Studio 1.2.1。非常感谢你。 - Alberto
也适用于MyEclipse 8.6.1! - techie2k
显示剩余2条评论

14

通常会创建一个.lock文件,用于决定锁定/解锁状态,并检查此文件的存在性。我认为如果您只删除这个.lock文件,问题将得到解决。


6
我不在电脑旁测试,但是svn cleanup命令无法解决这个问题吗?我通常只删除.lock文件。 - Kenny Cason
1
为什么它会被锁定呢?我从未要求将其锁定,也不认为我与Eclipse或Subversion的交互需要将其锁定。此外,在团队选项下,有锁定和解锁选项。在出现此错误时,锁定选项已启用,而解锁选项已禁用。 - jbranchaud
SVN清理也失败了。似乎没有解决这个问题的办法。 - jbranchaud
@KennyCason 如果它能正常工作的话,应该会。 @Treebranch 我认为当它开始提交时,它会创建这个文件,然后在提交完成后将其删除。可能还有其他情况需要创建此文件。但是,通常它不应该永远存在。我猜有时候会出现错误,它无法删除锁定文件,然后假设存在正在进行的操作,这将影响源的稳定性并且不允许任何更改。但是,通常有一个原因让那个文件存在。 :) - fmucar
@Treebranch,如果是这样的话,很可能是 SVN 操作期间出现了中断/错误,就像 @faith 和其他帖子中所说的那样 :) - Kenny Cason
显示剩余6条评论

9

我以前在使用SVN时遇到了很多问题,其中一件肯定会给我带来麻烦的事情就是在Eclipse之外修改文件或手动删除包含.svn文件夹的文件夹。这可能是我遇到的最大问题。

编辑 您还应该小心不要中断SVN操作,尽管有时可能会出现错误,这可能会导致.lock文件无法被删除,从而引发错误。


你说得很对,我相信我之所以会出现错误是因为我在调试我的插件时断点打断了SVN命令。 - jbranchaud

4

确保你准确地清理掉控制台的输出信息。例如,如果一个子文件夹(一个包)被锁定:

   svn: E155004: Commit failed (details follow):
  svn: E155004: Working copy 'C:\Users\laura\workspace\tparser\src\de\test\order' locked
  svn: E155004: 'C:\Users\laura\workspace\tparser\src\de\test\order' is already locked.

清理 C:/Users/liparulol/workspace/tparser/src/de/mc/etn/parsers/order 文件夹。

然后您需要清理指定的文件夹,而不是整个项目。如果您在eclipse中,请右键单击包而不是项目文件夹并执行清理操作。


这是真正的解决方案,救命稻草。 - andreasperelli

3

当你的项目中的某个文件夹出现问题时,就会出现这种情况。你需要找到被锁定的确切文件夹并在该文件夹下执行svn cleanup命令。你可以按照以下步骤解决:

  1. 运行svn commit命令以查找出问题的文件夹。
  2. 转到该文件夹并运行svn cleanup。然后就完成了。

3
以下步骤适用于解锁工作副本(已在svn客户端版本1.6.11和eclipse版本Mars.2 Release(4.5.2)上测试通过):
步骤1:(进入工作副本目录)$ cd working_copy_dir 步骤2:(连接svn sqlite数据库)$ sqlite3 .svn/wc.db
步骤3:(从表WC_LOCK中删除所有记录)sqlite> delete from WC_LOCK;
步骤4:(断开与sqlite 3数据库的连接)sqlite> ctrl + d
步骤5:(从eclipse中)右键单击您的工作副本,然后单击Team->Refresh/Cleanup

3
经过更多的探索和测试,发现这个问题是由于调试插件并使用断点引起的。显然,SVN/Subclipse不喜欢在执行过程中有断点,因此会创建锁定文件。一旦我开始只运行插件,这个问题就消失了。

2

我曾经遇到了使用com.xxx.service.model包时遇到了同样的问题。

为了解决这个问题,我首先备份了model包中的代码更改。然后删除了model包并与仓库同步。它会显示整个文件夹/包的传入内容。然后更新我的代码。

最后,将旧的代码提交到SVN存储库。它可以正常工作。


1
这件事情发生在我从另一个子版本控制项目复制一个目录并尝试提交时。解决方法是删除我想要提交的目录内的 .svn 文件夹。

0

解决方案: 步骤1:必须删除“.svn”隐藏文件下的“lock”文件。 步骤2:如果没有“lock”文件,则会看到“we.db”,您需要打开此数据库并仅从以下表中删除内容 – lock – wc_lock 步骤3:清理您的项目 步骤4:现在尝试提交。 步骤5:完成。


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