首页 > 解决方案 > 存储库中已存在锁定文件,这会阻止此操作完成

问题描述

我正在开发一个 ASP.NET Core 项目。我正在尝试push使用 GitHub Desktop 向我的分支提交。但是每次我尝试提交时,我都会收到此错误:

存储库中已存在锁定文件,这会阻止此操作完成。

在搜索互联网后,我找到的唯一解决方案是手动删除index.lock文件夹内的文件。.git

但是当我删除这个文件时,每次我尝试提交时它都会重新出现,使我无法提交。我已经尝试从 Visual Studio 提交,但它也失败了。

谁能帮我?

标签: gitgit-commitgithub-desktop

解决方案


Gitindex.lock过去知道某个 Git 进程——可能是这个,如果它刚刚创建index.lock自己,或者可能是其他 Git 进程——正忙于处理需要锁定 Git 索引的存储库。当 Git 成功地创建了这个锁文件后,它就会开始它的业务,更新各种内部数据库,直到完成。然后它会删除此锁定文件以表明它已完成,其他Git 命令现在可以开始、执行它们的操作并完成。

如果您的 Git 系统中存在错误,Git 命令可能会创建index.lock、开始工作,然后崩溃,留下锁定文件。在这种情况下,正确的做法是升级到没有 bug 的 Git,这样问题就不会再次发生,并且还要删除该index.lock文件。(您可以按任意顺序执行此操作,但如果错误仍然存​​在,一些 Git 命令可能会留下虚假锁。)由于测试套件相当广泛,这种错误在 Git 中很少见——在坏的情况下过去,它更常见,但现在几乎不会发生。

如果您的计算机本身崩溃(由于非 Git 错误、电源故障或其他原因),而 Git 正在执行这些操作之一,那么 Git 可能永远没有机会删除该index.lock文件。在这种情况下,您只需要index.lock手动删除该文件。但是,在计算机崩溃后, Git 内部数据库的其他部分可能已被崩溃损坏,因此明智的做法是运行git fsck. 这git fsck即使在健康的系统上,程序也会打印许多消息,所以不要对各种“悬空提交”或“悬空 blob”消息过于担心:这些只是提供信息。(总的来说,理想情况下,您的计算机本身根本不应该崩溃,您的电源也不应该出现故障,人们不应该在 2021 年 2 月在德克萨斯州冻死,但世界并不总是理想的。)

(Windows 系统有时会看到某些防病毒软件的不良行为。在某些情况下,这可能会自行消失。我避免使用 Windows,因此除了“避免使用 Windows”之外,我在这里没有具体的建议。)

最后,最近有一个问题已经成为一些人的普遍问题,因为云存储非常有吸引力。1 具体来说,如果您将 Git 存储库(.git目录)存储在某种云存储系统中,或者甚至存储在跨虚拟机的共享磁盘或共享文件系统设置,则试图同步这个存储区域可能会损坏你的 Git 存储库,包括复活伪造index.lock文件甚至损坏 Git 的内部数据库。不要这样做!将 Git存储库保存在非共享的本地磁盘区域中。


1好吧,至少表面上是这样。确实有优点,但我个人赞同Lamport 对分布式系统的定义:分布式系统是一种你甚至不知道存在的计算机的故障可能导致你自己的计算机无法使用的系统。


推荐阅读