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

问题描述 投票:0回答:4

我正在开发一个 ASP.NET Core 项目。我正在尝试使用 GitHub Desktop

push
提交到我的分支。但每次我尝试提交时,我都会收到此错误:

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

在互联网上搜索后,我找到的唯一解决方案是手动删除

index.lock
文件夹中的
.git
文件。

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

有人可以帮助我吗?

git git-commit github-desktop
4个回答
53
投票

只需删除

index.lock
文件夹中名为
.git
的文件即可。删除后,尝试再次提交。

步骤

  1. 导航到文件资源管理器中所需的文件夹
  2. 转到文件夹选项并勾选“显示隐藏文件”(根据您的操作系统,这可能有不同的名称)
  3. 将会显示一个
    .git
    文件夹。只需从那里删除
    index.lock
    文件,就可以再次提交了。

20
投票

Git 使用

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

如果您的 Git 系统中存在 bug,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 对分布式系统的定义:分布式系统是这样一种系统,在该系统中,您甚至不知道其存在的计算机发生故障可能会导致您自己的计算机无法使用。


2
投票

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

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

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

index.lock
文件。

作为替代方案,您可以考虑:

  • 隐藏更改,
  • 移至另一分行,
  • 向后退,
  • 应用隐藏,并且
  • 再推一次。

2
投票

您的 git 文件夹中有一个名为

[something].lock
(例如
HEAD.lock
)的文件。

删除它并重试提交。

© www.soinside.com 2019 - 2024. All rights reserved.