我正在处理一个ASP.NET核心项目。我正在尝试使用GitHub Desktoppush
提交到我的分支。但每次我尝试提交时,我都会收到这样的错误:
存储库中已存在一个锁定文件,该文件阻止完成此操作。
在互联网上搜索时,我找到的唯一解决方案是手动删除.git
文件夹中的index.lock
文件。
但当我删除这个文件时,每次我尝试提交时,它都会不断出现,使我无法提交。我已经尝试过从Visual Studio提交,但也失败了。
有人能帮我吗?
只需删除.git
文件夹中名为index.lock
的文件。删除后,请尝试再次提交。
步骤
- 在文件资源管理器中导航到所需文件夹
- 转到文件夹选项并勾选";显示隐藏文件"(根据您的操作系统,可能会有不同的名称)
- 将向您显示一个
.git
文件夹。只需从中删除index.lock
文件,就可以再次提交了
Git使用index.lock
来知道某个Git进程——可能是这个进程,如果它只是创建了index.lock
本身,也可能是其他某个Git进程——正忙于处理需要锁定Git索引的存储库。当一个Git成功地创建了这个锁文件时,它就会开始自己的业务,更新各种内部数据库,直到完成为止。然后删除这个锁文件以表明它已经完成,其他Git命令现在可以开始、完成它们的工作并完成。
如果你的Git系统中有错误,Git命令可能会创建index.lock
,开始执行它的工作,然后崩溃,留下锁文件。在这种情况下,正确的做法是升级到无缺陷的Git,这样问题就不会再次出现,还可以删除index.lock
文件。(您可以按任意顺序执行此操作,但如果错误仍然存在,某些Git命令可能会留下伪锁。)由于有一个相当广泛的测试套件,这种错误现在在Git中很少见——在过去糟糕的日子里,它更常见,但现在应该几乎不会发生了。
如果您的计算机本身崩溃(由于非Git错误、电源故障或其他原因),而Git正在执行其中一项操作,则Git可能永远没有机会删除index.lock
文件。在这种情况下,您只需要手动删除index.lock
文件。然而,在计算机崩溃后,Git内部数据库的其他部分可能已被崩溃损坏,因此运行git fsck
是明智的。CCD_ 15程序甚至在健康的系统上也打印许多消息;悬挂提交";或";悬挂斑点";信息:这些只是信息。(总的来说,理想情况下,你的电脑本身永远不应该崩溃,你的电源永远不应该失灵,人们也不应该在2021年2月在得克萨斯州冻死,但世界并不总是理想的。)
(Windows系统有时会看到一些防病毒软件的不良行为。在某些情况下,这种情况可能会自行消失。我避免使用Windows,所以除了"避免使用Windows"之外,我在这里没有具体的建议。)
最后,有一个问题最近已经成为一些人的常见问题,因为云存储非常有吸引力1具体来说,如果您将Git存储库(.git
目录)存储在某种云存储系统中,甚至存储在虚拟机上的共享磁盘或共享文件系统设置中,则试图同步此存储区域的不同代理之间的竞争可能会损坏您的Git存储池,包括恢复伪造的CCD_ 17文件,甚至破坏Git的内部数据库。不要这样!将Git存储库保存在未共享的本地磁盘区域。
1嗯,至少从表面上看。确实有好处,但就我个人而言,我赞同Lamport对分布式系统的定义:分布式系统是指一台你甚至不知道存在的计算机发生故障,会导致你自己的计算机无法使用的系统。
index.lock
文件保持重新出现很可能是因为GitHub Desktop或其他程序(如Visual Studio)或进程仍在使用它。
在极少数情况下,这可能是Git中的一个错误。
如果您无法轻松识别罪魁祸首并防止再次出现行为,则应考虑重新启动计算机,然后在启动GitHub Desktop和/或Visual Studio之前删除index.lock
文件。
作为替代方案,您可以考虑:
- Stash变化
- 移动到另一个分支
- 后退
- 应用存储,然后
- 再推一次
git文件夹中有一个名为HEAD.lock的文件夹。删除并重试提交。这对我来说是工作