“Folder”已被“Folder”锁定。

22

我遇到了一个非常非常让人恼火的问题,就是我正在尝试将主干版本合并到我的分支上进行一些更新。我每天都在做这个,但几乎每一天我都会遇到以下错误:

Error - 'D:\Code\Website' is already locked via 'D:\Code\Website'.
只有很少的情况下会发生这个错误,我才能成功地将主干合并回分支。然而,整天以来我一直在尝试获取最新的主干,但都没有成功。我已经四处寻找解决这个问题的答案了。在Stack Overflow, Google, 互联网上随机的论坛等等。我希望有人可以解释为什么会出现这种情况。
这是我已经尝试过的:
- 在目录中的每个文件夹上运行 "清理"。 - 检查 .svn 目录中的 "锁定" 文件 - 不存在。 - 打开 wc.db 文件并检查 WC_LOCK 表 - 里面没有任何东西。 - 禁用反病毒软件。 - 禁用 IIS。 - 检出一个全新的分支。 - 更新 TortoiseSVN。 - 完全卸载并重新安装 TortoiseSVN,并使用来自 TortoiseSVN.net 的最新 MSI(1.7.10.23359,SVN 1.7.7)。
我可以更新分支并提交它...从来没有出现过问题。只是合并主干时出现问题。团队中没有其他人遇到此问题(无论是与此分支还是其他分支)。他们可以自由地检出分支.. 合并主干并提交它而没有问题。
我正在使用 TortoiseSVN。你们能提供的任何帮助都将是fantastic!
编辑:测试合并可以正常工作,但实际合并不行。
更新:
原来 TSVNCache.exe 一直在 wc.db 文件上保持锁定。我不知道为什么。即使我杀死进程;一旦我通过 TSVN 合并 GUI 进行操作,它会再次启动缓存并将其锁定。我已经成功地通过命令行进行了合并.. 是否有办法修复缓存锁定问题以避免依赖于命令行?

如果真的被锁定了,“显示锁定”会告诉你什么?你正在使用带有SVN连接器的Eclipse吗?根据我的经验,这些连接器往往会搞乱你的本地工作副本。 - Linus Kleen
每个团队成员都可以合并到分支中,他们也可以提交它(我们有10个人..其中我已经让大约3或4个人为我尝试过)。此外,我没有安装AnkhSVN..我没有任何用于SVN的IDE插件..我只有TortoiseSVN(外壳扩展)。 - Simon Whitehead
如果你在VS中打开文件并使用TSVN合并,这可能是(侧面)锁定的原因。顺便问一下,“D:\ Code \ Website”是什么意思?你如何合并(请展示命令)? - Lazy Badger
锁定不会禁止本地合并,只会限制提交。因此 - 您没有 SVN 锁定,而是 Windows 锁定(用于打开的文件?) - Lazy Badger
在合并之前运行更新。如果您有混合版本的工作副本,则会出现问题。 - Stefan
显示剩余3条评论
4个回答

8
尝试关闭图标覆盖状态缓存(TSVNcache.exe进程负责的内容):
  1. 打开资源管理器
  2. 在任何地方单击右键,选择TortoiseSVN -> 设置
  3. 进入“图标覆盖”部分
  4. 在状态缓存下选择“无”单选按钮
  5. 点击应用
假设状态缓存已禁用且TSVNcache.exe未运行,则它就不会锁定任何文件。您至少可以排除这是否为问题(听起来似乎是)。这个进程负责在资源管理器中更新文件夹/文件图标,例如绿色勾号,红色修改标记等等。出于性能考虑,我已经多年禁用了此功能。我只查看修改的文件或打开提交对话框以查看哪些文件已更改。
之后,根据过去的经验,下一个最可能的嫌疑人是索引服务(Windows搜索)。

我做了这件事...现在当我看到合并失败并从sysinternals运行 handle时,我发现 TortoiseProc.exe 锁定它 :/ - Simon Whitehead
我有,是的。目前我会把它归咎于我的电脑很烦人。也许我可以因此得到一台新电脑? :) 感谢您的帮助。 - Simon Whitehead

4

我有同样的问题。这是我做的:

  1. 在任务管理器中结束explorer.exe进程
  2. 从任务管理器中重新启动它
  3. 现在合并可以正常工作了...

我猜想Windows Explorer可能会锁定某个东西。


我刚刚关闭了资源管理器窗口,这对我有用(至少这一次 - 我可以看到其他人关于持续问题的评论,这就是让我偏向Git的原因)。 - TheCrazyProgrammer

2

除了放弃图标覆盖之外,我找到了另一个解决方法。在Windows资源管理器中转到非svn文件夹,这样TortoiseSVN就不会与自身发生冲突。虽然很烦人,但如果你需要快速解决问题,这是个好方法。


1
我有同样的问题已经一段时间了,特别是因为我的存储库正在不断增长。
TSVNCache锁定工作副本的指针让我开始思考。为什么会这样呢?结论是:只有在它忙于更新工作副本状态(包括图标叠加)时才会这样做。
克服这个问题的一种方法正是Joshua McKinnon所说的:禁用图标叠加。如果这不是你想要的解决方案(因为你想保留图标),你还可以选择另一种方法:等待TSVNCache完成其工作。当你打开合并窗口时,你可以看到TSVNCache正在忙(在进程资源管理器中)。当这个忙碌结束后,就可以安全地进行合并了。从那时起,没有更多的锁定问题了!

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