本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
- 🚀 魔都架构师 | 全网30W技术追随者
- 🔧 大厂分布式系统/数据中台实战专家
- 🏆 主导交易系统百万级流量调优 & 车联网平台架构
- 🧠 AIGC应用开发先行者 | 区块链落地实践者
- 🌍 以技术驱动创新,我们的征途是改变世界!
- 👉 实战干货:编程严选网
GitHub: a lock file already exists in the repository.which blocks this operation fro
这个错误表示存在残留的index.lock文件,导致 Git 操作无法完成。可打开仓库中隐藏的 .git 目录,查找index.lock file。如果该文件存在,可将其删除。
但也可能当你删除这个文件后,每次尝试提交时它都会重新出现,导致还是无法提交。因为其他进程一直在创建锁定文件,那就必须先关闭比如我用的GitHub Desktop,然后才能删除 index.lock 文件。
本 bug 可能是由于 IDEA 和 GitHub 桌面版使用的 Git 版本冲突导致。
Git 使用index.lock来判断某个 Git 进程(可能是刚刚创建index.lock的当前进程,也可能是其他 Git 进程)正在对仓库执行需要锁定 Git 索引的操作。当 Git 成功创建此锁定文件后,它会继续执行其操作,更新各种内部数据库,直到完成。然后,它会删除此锁定文件以表明操作已完成,其他Git 命令现在可以开始执行并完成它们的任务。
如果你的 Git 系统存在bug,某个 Git 命令可能会创建index.lock,开始执行操作后崩溃,留下这个锁定文件。在这种情况下,正确的做法是升级到无 bug 的 Git 版本,以避免问题再次发生,同时删除index.lock文件。(你可以按任意顺序执行此操作,但如果 bug 仍然存在,某些 Git 命令可能会留下这个错误的锁定文件。)由于 Git 拥有相当完善的测试套件,这类 bug 在如今的 Git 版本中很少见——在过去,这种情况比较常见,但现在几乎不会发生。
如果在 Git 执行这些操作的过程中,你的电脑崩溃了(可能是由于非 Git 本身的 bug、断电或其他原因),那么 Git 可能就无法删除index.lock文件。在这种情况下,你只需要手动删除index.lock文件即可。但是,电脑崩溃后,Git 内部数据库的其他部分可能也受到了损坏,因此最好运行git fsck命令。即使在运行正常的系统上,git fsck程序也会输出一些信息,所以不必对各种“悬空提交”或“悬空数据块”之类的消息过于担心:这些信息只是提供参考。(一般来说,理想情况下,你的电脑永远不会崩溃,你的电源也永远不会中断,而且在 2021 年 2 月的德克萨斯州也不应该有人被冻死,但现实并非总是那么理想。)
最后 ,由于云存储的吸引力,最近一些人遇到了一个常见问题。¹ 具体来说,如果您将 Git 仓库(.git目录)存储在某种云存储系统中,甚至是在虚拟机上的共享磁盘或共享文件系统中,不同代理尝试同步此存储区域时产生的竞争可能会损坏您的 Git 仓库,包括恢复错误的index.lock文件,甚至损坏 Git 的内部数据库。切勿这样做!请将 Git仓库保存在非共享的本地磁盘区域中。
Windows 系统特例
由于 Windows 文件系统不区分大小写,我在 Windows 上使用 Git 一直遇到问题,而这最终也成为了其中一个可能的症状。当我尝试执行以下操作时,尽管根本没有锁,却收到了“死亡锁”的错误信息。
git fetch --pruneMac系统也可尝试,关闭了 GitHub Desktop,在终端运行了
git fetch --prune命令。重新打开 GitHub Desktop 后,锁定文件提示信息就不再出现了。
唯一的解决办法就是删除我的跟踪分支:
git branch -d --remote origin/...然后重试一次。