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

27
我正在开发一个ASP.NET Core项目。我试图使用GitHub桌面版将代码提交(push)到我的分支。但是每次尝试提交时,都会出现以下错误提示:

代码库中已经存在一个锁定文件,导致此操作无法完成。

在网上搜索后,我唯一能找到的解决方案就是手动删除.git文件夹内的index.lock文件。但是每次我删除这个文件后,只要我再次尝试提交,它就会重新出现,使我无法提交。我已经尝试了从Visual Studio提交,但也失败了。 有没有人能帮帮我?

3
看起来有其他进程一直在创建锁定文件。尝试重新启动你的计算机。同时尝试克隆一个新的副本,并检查它是否在新的克隆版本库中运行。 - ElpieKay
小心不要仅仅删除你的克隆,以防你在分支上存储了更改。这样你会丢失它们。按照下面提到的方法删除 index.lock 应该可以解决问题。 - Akaisteph7
4个回答

43

只需删除名为 index.lock 的文件,该文件位于 .git 文件夹中。删除后,尝试再次提交。

步骤

  1. 在文件浏览器中导航到所需的文件夹
  2. 进入文件夹选项并勾选“显示隐藏文件”(根据您的操作系统,可能会有不同的名称)
  3. 您将看到一个 .git 文件夹。只需前往那里删除 index.lock 文件,然后您就可以再次进行提交。

1
简单、逻辑清晰且概括的回答。谢谢。 - Omrum Cetin
这个文件应该是.git/index.lock。但是它可能不会在你的编辑器(例如VSCode)中显示出来。 - Akaisteph7

19
Git使用index.lock来知道一些Git进程(也许是这个进程,如果它刚刚创建了index.lock本身,或者可能是其他Git进程)正在对需要锁定Git索引的存储库进行操作。当Git成功创建此锁定文件时,它会继续处理,更新各种内部数据库,直到完成。然后,它会删除此锁定文件以表明已完成,并且其他 Git命令现在可以开始执行它们的任务并完成。
如果您的Git系统中存在错误,则可能会出现Git命令创建index.lock,开始执行其工作,然后崩溃,留下锁定文件。在这种情况下,正确的做法是升级到非有bug的Git,以便问题不再发生,并删除index.lock文件。(您可以按任意顺序执行此操作,但如果bug仍然存在,则某些Git命令可能会留下虚假锁定。)由于相当广泛的测试套件,这种bug在Git中很少见-在早期版本中,这种情况更为常见,但现在几乎不会发生。
如果您的计算机本身崩溃(由于非Git bug,电源故障或其他原因),而Git正在进行这些操作中的某一个,那么Git可能永远没有机会删除index.lock文件。在这种情况下,您只需要手动删除index.lock文件。但是,在计算机崩溃后,Git内部数据库的其他部分可能已经因崩溃而受到损坏,因此最好运行git fsckgit fsck程序即使在健康系统上也会打印许多消息,因此不要对各种“悬空提交”或“悬空blob”消息过于担心:这些仅作为信息提供。(总体上和理想情况下,您的计算机本身根本不应该崩溃,您的电源也不应该失败,并且人们不应该在2021年2月的德克萨斯州冻死,但现实并不总是理想的。)
(Windows系统有时会从某些防病毒软件中看到不良行为。在某些情况下,这可能会自行消失。我避免使用Windows,因此在这里没有具体建议,除了“避免使用Windows”。)
最后,有一个问题最近成为一些人的共同问题,因为云存储非常有吸引力。具体来说,如果您将Git存储库(.git目录)存储在某种云存储系统中,甚至是在虚拟机上跨共享磁盘或共享文件系统设置中,试图同步此存储区域的不同代理之间的竞争可能会破坏您的Git存储库,包括恢复伪造的index.lock文件甚至损坏Git的内部数据库。不要这样做!将Git存储库保留在未共享的本地磁盘区域中。

1好吧,至少表面上是这样。确实有优点,但就个人而言,我认同Lamport关于分布式系统的定义:分布式系统指的是当你甚至不知道某台计算机存在时,它的故障会导致你自己的计算机无法使用。


2
index.lock文件不断出现的原因很可能是GitHub Desktop或其他程序(例如Visual Studio)或进程仍在使用它。在罕见情况下,这可能是您的Git中的错误。
如果您无法轻松识别罪犯并防止重新出现的行为,则应考虑重新启动计算机,然后在启动GitHub Desktop和/或Visual Studio之前删除index.lock文件。
作为替代方案,您可以考虑:
  • 隐藏更改,
  • 移至另一个分支,
  • 再次移回,
  • 应用隐藏更改,
  • 再次推送。

1
你的git文件夹里有一个名为HEAD.lock的文件夹。请删除并重试提交。这对我起作用了。

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