在过去的几周里,我收到了一条关于index.lock存在几次的消息。
删除该文件作为解决方案提到 git index.lock File exists when I try to commit, but cannot delete the file
是否正在删除该文件,或者我是否需要执行其他操作(有没有办法验证完整性等等?)。
这是在使用git命令行工具,TortoiseGIT和SourceTree安装的Windows x64系统(完全修补)上。
答案 0 :(得分:5)
other answers没有提及index.lock
的内容
然而,它在Git发行版中记录在文件“Documentation/technical/api-lockfile.txt
”下。
是否足够删除该文件?
根据该文档,似乎删除就足够了。
lockfile API有两个目的:
相互排斥。
当我们写出一个新的索引文件时,首先我们创建一个新文件$GIT_DIR/index.lock
,将新内容写入其中,然后将其重命名为最终目标$GIT_DIR/index
。我们尝试使用O_EXCL创建$GIT_DIR/index.lock
文件,以便在其他人已经尝试更新索引文件时我们可以注意到并失败。自动剔除。
在我们创建“锁定”文件后,我们可能决定die()
,我们希望确保删除尚未提交到其最终目的地的文件。
这是通过记住我们在链表中创建的锁定文件并从atexit(3)
处理程序中清除它们来完成的。当程序死于信号时,也会删除未完成的锁定文件。
在Windows上,不应存在权限问题(例如将该文件创建为“root
”的一个Git工具)。
唯一的问题是您的一个Windows工具:
考虑到该文件是在O_EXCL
锁定方案下创建的,很可能无法创建它,因为它被另一个PID锁定。
正如mentioned here:
唯一的事情
O_EXCL
会导致调用失败,如果文件存在且指定了O_CREAT
。
2015年8月更新,git 2.6 +(2015年第3季度)
The "lockfile" API has been rebuilt on top of a new "tempfile" API.
commit 9e90331,commit 18a3de4,commit ebebeae,commit 00539ce,...(巨额列表),commit 2db69de(2015年8月10日){{3 }}。
(由Michael Haggerty (mhagger
)合并于Junio C Hamano -- gitster
--,2015年8月25日)
tempfile API允许创建,删除和原子重命名临时文件 程序结束时仍处于活动状态的临时文件会自动清除 Lockfiles构建在此API之上。