.git / index.lock文件实际上做了什么?

时间:2013-11-28 14:10:46

标签: git locking

我目前遇到了需要删除.git/index.lock文件的问题。我没有太多犹豫,我猜这个文件以某种方式锁定了可以访问git repo的进程。但是,我似乎无法找到关于此文件实际执行的内容的良好描述/文档以及为什么会出现例如in this question(link)所描述的问题。

index.lock实际上做了什么,以及导致人们与此文件相关的问题的原因是什么?

我很高兴知道将来可以防止这个问题。

1 个答案:

答案 0 :(得分:5)

我是从https://www.kernel.org/pub/software/scm/git/docs/technical/api-lockfile.html找到的。这会告诉您.git/index.lock的作用。

  
      
  • 相互排斥。当我们写出一个新的索引文件时,首先   我们创建一个新文件$GIT_DIR/index.lock,编写新文件   将内容放入其中,并将其重命名为最终目的地   $GIT_DIR/index。我们尝试创建$GIT_DIR/index.lock   文件与O_EXCL,以便我们可以注意到并失败的时候   else已经在尝试更新索引文件。
  •   
  • 自动剔除。在我们创建“锁定”文件后,我们   可能决定die(),我们希望确保我们   删除尚未提交到最终文件的文件   目的地。这是通过记住我们的锁定文件来完成的   在链接列表中创建并从中清除它们   atexit(3)处理程序。优秀的锁定文件也被删除   当程序死于信号时。
  •   

我猜你说的问题的原因是某些操作系统上自动剔除的故障。几年前我在Linux上使用过Git,但还没有遇到过这样的问题。