SVN中的工作副本XXX已锁定,清理失败


582

我执行以下操作时收到此错误svn update

工作副本XXXXXXXX已锁定请执行“清理”命令

运行清理时,我得到

清理无法处理以下路径:XXXXXXXX

我如何摆脱这个循环?


5
我也收到了此消息。提供的答案看起来有些乏味(尤其是投票最高的答案)。我刚刚关闭了VS并重新提出了解决方案,然后我就可以检查所有内容。
oscreatingcretin

在eakkas评论之后,使用Firefox的SQLLite Manager从WORK_QUEUE表中删除条目为我解决了此问题。
齐柏林飞艇

12
有一个简单的答案,只需选中选项“ break locks”,它将清理您的工作副本
Farhan 2015年

Answers:


517

一种方法是:

  1. 将已编辑的项目复制到另一个位置。
  2. 删除包含问题路径的文件夹。
  3. 通过Subversion更新包含的文件夹。
  4. 复制文件或根据需要合并更改。
  5. 承诺

另一个选择是删除顶层文件夹,然后再次签出。希望这不会解决。


123
向您+1可以解决此问题,不仅可以解决OP的问题(以及我的问题),还可以提供5个似乎可以解决任何SVN问题的步骤。-1颠覆所需的此类解决方法。
pxl 2010年

34
尽管从技术上讲这是可行的,但与删除锁相比,这样做实在是一种糟糕的方法,它值得一票。
Jukka Dahlbom'5

8
我无法执行第3步,因为...“工作副本已被锁定”
Evgeny

20
考虑一下BradS的建议:“对我来说,诀窍是在工作副本的顶部运行'svn cleanup',而不是在问题一直发生之前我一直在工作的文件夹中运行。
Marco Marco

5
对于使用Tortoise SVN的用户,可以在检出目录的根文件夹上运行清理并强制使用Break Locks。此外,您可以要求它删除未版本控制的文件。然后进行更新。
Obaid

476

对我来说,诀窍是svn cleanup在工作副本的顶部运行,而不是在问题发生之前一直在工作的文件夹中运行。


通常可以正常工作,但现在不行了,不确定是否是因为我升级到SVN 1.7
Populus

4
这对于运行1.7的客户端来说对我有用,尽管服务器仍然是1.6.x
Mark Hosang

在1.7上为我工作倍受赞赏
Scarpacci'2

1
我将Intu的答案中的提示与此内容结合在一起:在其.svn文件夹中查找具有“锁定”文件的父文件夹,然后在该文件夹中运行“ svn cleanup”。那对我有用。
rob74

5
这对我有用,比Chuck的方法快得多。因此,值得一试。
goamn

210

在您的.svn文件夹中查找,其中会有一个名为的文件lock。删除该文件,您将可以更新。.svn每个子目录的目录中可能有更多的锁定文件。他们还需要删除。这可以非常简单地从命令行使用批处理完成,例如

find . -name 'lock' -exec rm -v {} \;

请注意,您正在手动编辑文件.svn夹中的文件。他们被放在那里是有原因的。该原因可能是一个错误,但如果不是这样,则可能会损坏本地副本。

消息来源:http ://www.svnforum.org/2017/viewtopic.php?p= 6068


8
+1我认为这是比目前投票最高的答案更好的方法-我讨厌必须先将文件复制到其他地方才能解决此(常见!)问题。Mine是由代码生成工具生成的,该工具生成的文件与其他人已经添加到SVN的名称相同。我想不首先“ svn up”的
坏处是

44
这在Tortoise / SVN 1.7中不再起作用(或者至少我找不到任何锁定文件,因为现在有了带有元数据的集中式数据库)。
pesche 2011年

10
这是一个快速的一线工具,应从当前目录中递归删除所有锁:find . | grep ".svn/lock" | xargs rm
Jesse

1
使用SVN 1.7时,@ BradS的答案似乎更有效。这个答案对我不起作用,而BradS的对我来说却没有。
Ira Baxter

1
就我而言,在任何地方都找不到锁文件。
蒂姆·MB

106

就我而言,我通过手动删除WC_LOCK表中SQLite“ .svn \ wc”文件锁定记录中的一条记录来解决该问题。

我用SQLite编辑器打开“ WC”文件并执行

delete from WC_LOCK

屏幕截图显示了从WC_LOCK清除的所有条目

eakkas的评论之后,您可能还需要从WORK_QUEUE表中删除所有条目。


1
对于Windows上的Subversion 1.7.5,这对我有用。从此处下载了SQLite Expert试用版:sqliteexpert.com/download.html。在“ SQL”标签中运行上面的“删除” SQL语句。
M Katz 2012年

这要好得多,唯一的区别是我单击了红色(-)按钮
Rohit Srivastava 2013年

3
一个免费的DI SQL间谍也可以解决问题:yunqa.de/delphi/doku.php/products/sqlitespy/index
Ivelin Nikolaev

12
这也对我有用,但是我还需要清除WORK_QUEUE表中的条目
eakkas 2013年

6
无法通过从WC_LOCK中删除项目来进行工作-工作是在查看我的WORK_QUEUE项目的blob内容,并且确定它是问题文件-我从回购浏览器中删除了该文件,然后删除了work_queue项目-此后进行清理并重新营业!
GregM 2013年

95

最简单的方法:

  1. 转到父目录(文件夹)项目
  2. 普雷斯右键点击
  3. 按下TortoiseSVN,然后按下清理...
  4. 清理对话框将自动出现
  5. 选择Clean up working copy statusBreak locksFix time stampsVacuum pristine copiesRefresh shell overlaysInclude externals
  6. 普雷斯OK

您成功完成了工作。

检查屏幕快照以供参考。

第一步:

在此处输入图片说明

第二步: 启用“中断锁定”选项(清理弹出窗口中的第二个复选框) 在此处输入图片说明

希望这对您有很大帮助。


10
就我而言,“ Break lock”选项已足够,也许只能尝试使用此选项
Donatello

好答案。我遇到了一个“对话盲”的情况,从未检查过清理选项。从历史上看,“导航到根和清理”用于工作,但我想打破锁在我的情况就足够了..
菲尔·库珀

1
也为我工作!
Daniel Silva

没想到“中断锁”会做到这一点,因为我没有做任何锁。但是显然,它破坏了导致此问题的svn内部锁。谢谢!
basher

我😦没有工作
好战黑猩猩

48

一个在工作的同事不断看到此消息,对他来说,这是因为他删除了SVN版本控制的目录而不将其从SVN中删除,然后在同一个名字下的位置创建了一个新目录,该目录不受版本控制。

如果这是您的问题...:

有多种修复方法,具体取决于替换目录的方式/原因。

无论哪种方式,您都可能需要:

A)将现有目录重命名为临时名称

B)执行SVN还原以恢复从文件系统删除的目录,但不恢复从SVN删除的目录

从那里,你要么

A)将相关文件复制到已删除的目录中

B)如果目录中的内容有重大更改,请对原始目录进行SVN删除,然后提交,然后将新目录重命名为所需的名称,然后添加SVN以使该目录受版本控制。


1
您的第二步B)对我来说似乎是个坏主意,因为它会破坏新目录中保留的原始目录项的修订历史记录。
Dunaril 2011年

当人员从文件系统而不是从SVN删除版本化目录时,发生了非常糟糕的事情。上面的答案可能不是完美的恢复,但它是一种恢复。
Teemu Leisti 2012年

34

对我来说,以上解决方案均无效。我通过打破锁找到了解决方案。当我执行svn清理时,我选择了“中断锁定”以及“清理工作副本状态”。

在此处输入图片说明


对我来说,从Tortoise SVN存储库浏览器中打破锁定是可行的。打破检出文件夹上的锁没有执行任何操作。
Bhargava Mummadireddy

23

这个为我工作。

  1. 转到根文件夹,
  2. 右键单击并清除
  3. 检查所有可用选项
  4. 按确定

清理后,它将允许您更新到最新版本。


2
这也对我有用。您需要检查所有可用的选项(我的版本中有6个条目)才能进行清理;如果仅检查[清理工作副本状态]和[包括外部组件]选项,它将失败。
Vincent Jia

1
这完全对我有用...只需右键单击项目>团队>清理。不必从.svn中的SQL中删除任何行,也无需删除任何其他行。这样做就可以了。谢谢!
msqar

在TortoiseSVN的1.7.4版本中,这也对我有效。我使用了显示的默认复选框。
slm 2014年

今天对我有帮助,但我不需要检查所有可用选项。最后三个恢复了我未检查的更改,但仍然有效。另请参见stackoverflow.com/a/35192644/460775
EMBarbosa,2016年

1
这对我有用。我刚刚检查了一下Clean up working copy statusBreaks locks并且Include externals
Phiber

11

对我来说,实际上是乌龟的错。Tortoise只是抱怨“无法清理,运行清理”,但是当我运行命令行(svn清理)时,它显然告诉我它无法删除某些正在使用的文件,解决方案显而易见。一旦我关闭了Visual Studio(使文件保持打开状态),清理工作就很好了。

其他程序也可以使文件在仓库中保持打开状态,从而导致此问题。在另一个实例中,使xls打开的Excel是罪魁祸首,因此明智的做法是关闭所有可能正使用仓库中任何内容的程序,甚至重新启动以迫使程序关闭然后再次尝试清除。


7

我遇到了这个问题,因为外部文件夹不想链接到现有文件夹。如果添加svn:externals属性行,其中目标是现有(版本或非版本)文件夹,则将收到SVN Woring Copy锁定错误。在这里清理也会告诉您一切都很好,但是仍然无法进行更新。

解决方案:从存储库中删除麻烦的文件夹,并在设置svn:externals属性的根文件夹中进行更新。这将创建文件夹,并且一切都将恢复正常。

这个问题对我来说是个问题,因为文件的svn:externals要求对目标文件夹进行版本控制。当我发现这不适用于不同的存储库后,我从外部文件交换到外部文件夹并陷入混乱。


6

最简单的方法是显示隐藏的文件夹,然后打开.SVN文件夹。您应该会看到一个名为“锁”的零KB文件,删除此文件将解决此问题。


5

我使用SVN 1.7遇到了完全相同的问题,并且上述修复程序均无效。

首先,请确保备份所有已编辑的内容。

花了几个小时后(由于分支的大小超过6GB,所以没有重新下载所有内容),我发现分支的.svn文件夹中有一个名为“ wc”的数据库文件。

使用任何数据库管理器(我使用过firefox的sqlite管理器插件)打开数据库文件,并导航至WC_LOCK表。该表将具有获取的锁的条目。从表中删除记录,您就可以完成:)


即使它与先前的答案几乎是重复的,我还是给您投票,因为您提到了firefox SQLite Manager插件。
ehambright

3

当我遇到此问题时,我发现通常直接在问题路径上运行cleanup命令。然后,我将从工作根再次运行清除,它将抱怨其他一些目录。我只是重复一遍,直到它不再抱怨为止。


1
我找不到像以前的答案一样的锁定文件,但这对我
有用

3

如果您使用的是Windows计算机,请通过浏览器查看存储库,您很可能会看到两个文件名相同但大小写不同的文件。Subversion区分大小写,而Windows则不区分大小写,因此当Windows认为它正在拉下相同的文件而Subversion却没有时,您可以获得锁。删除存储库中重复的文件名,然后重试。


3

我是通过创建一个新文件夹,检出项目,将更新的文件复制到新文件夹来完成的。

它通过新的结帐进行修复。


我也一样 (我将根本原因归结为AnkhSVN弄乱了我的工作副本。现在已卸载AnkhSVN)。
Scotty.NET

2

您正在使用TortoiseSVN并刚刚升级吗?从1.4移至1.5且未重新启动之前,我曾遇到过此问题。(尝试重新启动)。

您需要重新启动的原因是因为缓存文件变得很时髦。

否则,只需继续,将工作副本导出到新文件夹(不要复制.svn隐藏文件夹),重新签出项目,然后移回所有代码,然后继续进行提交。


这对我来说太,这是我只需要重新启动
马修锁定

2

只需删除.svn文件夹,然后在父目录上运行清理即可。完美的作品!


3
在SVN 1.7中,此操作将无效,因为顶部只有一个.svn文件夹。如果删除,则将删除存储库的附件。
AnneTheAgile 2012年

2

在Mac OS下的版本中:操作->清理工作副本锁定在...


2

我经常遇到这样的问题。我的模式会导致清理问题。

  1. 我在查看器中打开图像文件。
  2. 我删除图像文件/文件夹。
  3. 我正在尝试提交/更新

关闭打开已删除文件的图像查看器可以解决此问题。也许其他软件可以用相同的方式阻止清除。

一般来说。我相信在这种情况下重启计算机可能会有所帮助。


1

从存储库中获取实际文件之前,SVN通常会更新文件夹中文件的内部结构(.svn / prop-base)。提取文件后,该文件将被清除。通常,由于在更新过程中“更新”失败或过早取消而引发错误。

  1. 检查.svn / prop-base目录下是否列出了任何文件
  2. 删除不在该文件夹下的所有文件
  3. 清理
  4. 更新资料

现在更新应该可以了。


1

发生了同样的问题,因为我在版本控制的文件夹下导出了一个文件夹。不得不从TortoiseSVN中删除文件夹,然后从文件系统中删除该文件夹(TortoiseSVN不喜欢未版本控制的子文件夹...为什么不呢???)


我应该补充一点,我已将文件夹导出到同一文件夹..这是您取消版本预览的方式。版本文件夹。

1

开始搜索....锁定...选择所有列出的文件并删除..已修复


1

应该执行以下操作:

svn状态| grep“ .L” | sed's /.*(。*)$ / \ 1 /'| awk'{打印长度($ 1),$ 1}'| 排序-nr | awk'{print“ pushd” $ 2“; svn cleanup; popd”}'| | | SH


1

不要删除您的解决方案!

在.svn文件夹中,您有一个名为lock的文件,它的长度为0个字节

您可以从解决方案中的所有.svn文件夹中删除所有这些文件,然后它将起作用

以我为例


这是最简单的解决方案!为我工作
内森(Nathan)

是的,不幸的是,它不适用于最新版本的SVN。对于最新版本,您必须删除它,因为不再有锁定文件。似乎不再有任何文件,它具有一个完整的其他文件夹结构。如果有人知道仍然可以按照上述方法进行修改,请与我们分享。
2012年

1

这些文件的原位取消版本控制以及到同一位置的全新签出为我解决了这个问题。

在TortoiseSVN中,要进行就地取消版本控制,请将工作副本的根文件夹从文件列表中右拖到目录树中的自身上,然后从弹出菜单中选择“ SVN在此处导出版本化的项目”。TortoiseSVN注意到目标与源相同,并建议取消版本化工作副本。

取消版本控制后,将其重新签到同一文件夹(该文件夹现在包含您拥有的所有文件的未版本控制的副本)。TortoiseSVN会警告您您正在检入现有文件夹,但是可以继续进行。

此后,清理,更新和其他操作便顺利进行了。由于以上两个步骤都保留了本地修改,因此不会丢失任何信息(但是在此之前备份工作副本可能还是个好主意)。

一个警告:如果工作副本包含混合版本或未提交的属性更改,则该信息将丢失。对我来说,这是不常见的情况,考虑到选择损坏的工作副本或丢失未提交的属性更改,我倾向于选择后者。


1

我遇到了“清理”工作的问题,但“更新”将继续失败。可行的解决方案是通过Windows资源管理器删除有问题的文件夹,而不是TortoiseSVN的删除(这将删除标记为要提交到存储库的内容,然后我执行了“签出”操作,以从存储库中实质上“更新”文件夹。

有关O / S删除和SVN删除之间区别的更多信息,请参见: http //tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-rename.html

值得注意的是:

当您使用TortoiseSVN→删除文件时,该文件会立即从工作副本中删除,并在下次提交时在存储库中标记为删除。

和:

如果通过浏览器而不是使用TortoiseSVN上下文菜单删除文件,则提交对话框将显示这些文件,并允许您在提交之前将它们也从版本控制中删除。但是,如果更新工作副本,Subversion将发现丢失的文件,并将其替换为资源库中的最新版本。


1

如果您使用的是Linux,请尝试以下操作:

find "/the/path/to/your/directory" -name .svn -type d | xargs chmod 0777 -R

然后cleanup在该目录上运行命令,然后尝试更新。


1

我做了以下事情来解决我的问题:

  1. 通过在文件夹名称前面放置“ _”来重命名有问题的文件夹。
  2. 对父文件夹进行了“清理”。
  3. 将有问题的文件夹重命名为其原始名称。
  4. 做了一个承诺。


1

做清理

  1. 删除.svn文件夹。

  2. 在根文件夹中执行svncheckout。

  3. 尝试执行清理操作。

这解决了我的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.