如果git index.lock存在,我可以安全地删除它,或者需要更多的操作来validation完整性?

在过去的几个星期里,我收到了关于index.lock几次存在的消息。

删除该文件被提到作为解决scheme在git index.lock文件存在,当我尝试提交,但不能删除该文件

是删除该文件够了,还是有其他行动,我应该需要做的(有办法来validation完整性等?)。

这是在Windows x64系统(完全修补)与git命令行工具,TortoiseGIT和SourceTree安装。

没有其他的 答案提到了那个index.lock是什么。
然而,它被记录在一个Git分发中,文件“ Documentation/technical/api-lockfile.txt ”下。

删除该文件是否足够?

在这个文档之后,似乎删除就足够了。

lockfile API

lockfile API有两个用途:

  • 相互排斥
    当我们写出一个新的索引文件时,首先我们创建一个新文件$GIT_DIR/index.lock ,将新内容写入它,并将其重命名为最终目标$GIT_DIR/index 。 我们尝试使用O_EXCL创建$GIT_DIR/index.lock文件,这样当其他人已经尝试更新索引文件时,我们可以注意到并失败。

  • 自动移除残余物
    在我们创建“lock”文件之后,我们可能会决定die() ,并且我们要确保我们删除没有被提交到最终目的地的文件。
    这是通过记住我们在链表中创建的锁文件并从atexit(3)处理程序清理它们来完成的。 当程序死在信号上时,出色的锁文件也被删除。

在Windows上,不应该有权限问题(比如一个Git工具创建该文件为“ root ”)。
唯一的问题将是您的Windows工具之一:

  • 在系统帐户而不是用户帐户下运行,
  • 或启动临时文件(意味着创建一个索引和创建index.lock文件),并有另一个工具来开始登台以及同一个仓库中的文件。

考虑到文件是在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之上。