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 fsck
。
git fsck
程序即使在健康系统上也会打印许多消息,因此不要对各种“悬空提交”或“悬空blob”消息过于担心:这些仅作为信息提供。(总体上和理想情况下,您的计算机本身根本不应该崩溃,您的电源也不应该失败,并且人们不应该在2021年2月的德克萨斯州冻死,但现实并不总是理想的。)
(Windows系统有时会从某些防病毒软件中看到不良行为。在某些情况下,这可能会自行消失。我避免使用Windows,因此在这里没有具体建议,除了“避免使用Windows”。)
最后,有一个问题最近成为一些人的共同问题,因为云存储非常有吸引力。具体来说,如果您将Git存储库(
.git
目录)存储在某种云存储系统中,甚至是在虚拟机上跨共享磁盘或共享文件系统设置中,试图同步此存储区域的不同代理之间的竞争可能会破坏您的Git存储库,包括恢复伪造的
index.lock
文件甚至损坏Git的内部数据库。不要这样做!将Git存储库保留在未共享的本地磁盘区域中。
1好吧,至少表面上是这样。确实有优点,但就个人而言,我认同Lamport关于分布式系统的定义:分布式系统指的是当你甚至不知道某台计算机存在时,它的故障会导致你自己的计算机无法使用。
index.lock
应该可以解决问题。 - Akaisteph7