在过去的几周里,我得到了一条关于index.lock存在几次的消息.
删除该文件在git index.lock中作为解决方案提到 我尝试提交时存在文件,但无法删除该文件
是否正在删除该文件,或者是否需要执行其他操作(有没有办法验证完整性等等?).
这是在安装了git命令行工具,TortoiseGIT和SourceTree的Windows x64系统(完全修补)上.
没有其他 答案提到那index.lock
是什么.
然而,它在文件" Documentation/technical/api-lockfile.txt
" 下的Git发行版中有记录.
删除该文件足够吗?
在该文档之后,似乎删除就足够了.
lockfile API有两个目的:
相互排斥.
当我们写出一个新的索引文件时,首先我们创建一个新文件$GIT_DIR/index.lock
,将新内容写入其中,然后将其重命名为最终目标$GIT_DIR/index
.我们尝试$GIT_DIR/index.lock
使用O_EXCL 创建文件,以便在其他人已经尝试更新索引文件时我们可以注意到并失败.自动拆卸.
在我们创建"锁定"文件之后,我们可以决定die()
,并且我们希望确保删除尚未提交到其最终目标的文件.
这是通过记住我们在链表中创建的锁定文件并从atexit(3)
处理程序中清除它们来完成的.当程序在信号上死亡时,也会删除优秀的锁定文件.
在Windows上,不应存在权限问题(例如将该文件创建为' root
'的Git工具).
唯一的问题是您的一个Windows工具:
要么在系统帐户下运行,要么在用户帐户下运行,
或者开始暂存文件(意味着创建索引并创建index.lock文件),并使用另一个工具来启动同一个仓库中的暂存文件.
考虑到该文件是在O_EXCL
锁定方案下创建的,很可能无法创建它,因为它被另一个PID锁定.
正如这里提到:
唯一的办法
O_EXCL
是如果文件存在并被O_CREAT
指定,则导致调用失败.
2015年8月更新,适用于git 2.6+(2015年第3季度)
"lockfile"API已在新的"tempfile"API之上重建.
请参阅提交9e90331,提交18a3de4,提交ebebeae,提交00539ce,...(巨大的列表),提交2db69de(2015年8月10日)作者:Michael Haggerty(mhagger
).
(由Junio C gitster
Hamano合并- -在提交db86e61,2015年8月25日)
临时文件API允许创建,删除和原子重命名临时文件.
程序结束时仍处于活动状态的临时文件会自动清除.
Lockfiles构建在此API之上.