在过去的几个星期里,我收到了关于index.lock几次存在的消息。
删除该文件被提到作为解决scheme在git index.lock文件存在,当我尝试提交,但不能删除该文件
是删除该文件够了,还是有其他行动,我应该需要做的(有办法来validation完整性等?)。
这是在Windows x64系统(完全修补)与git命令行工具,TortoiseGIT和SourceTree安装。
没有其他的 答案提到了那个index.lock
是什么。
然而,它被记录在一个Git分发中,文件“ Documentation/technical/api-lockfile.txt
”下。
删除该文件是否足够?
在这个文档之后,似乎删除就足够了。
lockfile API有两个用途:
相互排斥 。
当我们写出一个新的索引文件时,首先我们创建一个新文件$GIT_DIR/index.lock
,将新内容写入它,并将其重命名为最终目标$GIT_DIR/index
。 我们尝试使用O_EXCL创建$GIT_DIR/index.lock
文件,这样当其他人已经尝试更新索引文件时,我们可以注意到并失败。自动移除残余物 。
在我们创建“lock”文件之后,我们可能会决定die()
,并且我们要确保我们删除没有被提交到最终目的地的文件。
这是通过记住我们在链表中创建的锁文件并从atexit(3)
处理程序清理它们来完成的。 当程序死在信号上时,出色的锁文件也被删除。
在Windows上,不应该有权限问题(比如一个Git工具创建该文件为“ root
”)。
唯一的问题将是您的Windows工具之一:
考虑到文件是在O_EXCL
锁定方案下创建的,可能无法创建它,因为它被另一个PID锁定。
如上所述:
如果文件存在并且指定了
O_CREAT
O_EXCL
所做的唯一的事情就是导致调用失败。
2015年8月更新,适用于git 2.6+(2015年第三季度)
“lockfile”API已经在新的“tempfile”API之上重建。
参见提交9e90331 , 提交18a3de4 , 提交ebebeae , 提交00539ce ,…(巨大列表), 提交2db69de (2015年8月10日)作者: Michael Haggerty( mhagger
) 。
(由Junio C gitster
合并- gitster
-在db86e61提交 ,2015年8月25日)
临时文件API允许创建,删除和原子重命名临时文件。
程序结束时仍然处于活动状态的临时文件将自动清除。
Lockfiles建立在这个API之上。