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

问题描述

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

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

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

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

有人可以帮我吗?

解决方法

Git 使用 index.lock 来知道某个 Git 进程(可能是这个进程,如果它刚刚创建了 index.lock 本身,或者可能是其他某个 Git 进程)正在忙于处理需要锁定 Git 的存储库的事情指数。当一个 Git 成功创建这个锁文件时,它就会继续它的业务,更新各种内部数据库,直到它完成。然后它删除这个锁文件以表明它已经完成,并且其他Git命令现在可以开始、做他们的事情并完成。

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

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

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

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


1好吧,至少在表面上是这样。确实有优势,但我个人订阅了Lamport definition of a distributed system: A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable.

,

保留的 index.lock 文件很可能重新出现,因为 GitHub Desktop 或其他程序(例如 Visual Studio)或进程仍在使用它。

在极少数情况下,这可能是您的 Git 中的错误。

如果您无法轻松识别罪魁祸首并防止再次出现行为,您应该考虑重新启动计算机,然后在启动 GitHub Desktop 和/或 Visual Studio 之前删除 index.lock 文件。

作为alternative,您可以考虑:

  • 存储更改,
  • 搬到另一个分支,
  • 往回走,
  • 应用 stash 和
  • 再按一次。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...