git pull origin <branch> 是否创建 index.lock?

Sid*_* KS 2 git github

index.lock 文件在 git 存储库的 .git 文件夹中创建。它有助于检查是否有任何操作正在进行。但是当我执行git pull origin 时,没有创建 index.lock 文件。

tor*_*rek 5

目前还不清楚你为什么要问这个。索引也称为暂存区,有时也称为缓存——这些都是一样的。一般来说,您不必担心它在内部是如何工作的,但是 Git 需要在需要更新索引时锁定索引。因此,index.lock在这些情况下,Git 会创建一个文件。

git pull运行git fetch后跟第二个 Git 命令,通常是git merge.

git fetch 不需要锁定索引(永远),因为它从不更新索引。

git merge根据您要求它合并的内容以及您给它的标志,执行几种不同的操作之一。在某些情况下,该git pull命令可以传递--no-ffgit merge以便强制执行特定操作,但如果您不使用它,则会得到:

  • 什么都没有,如果没有什么可以合并的话。
  • 一个快进,如果当前提交操作是严格后面提交你(或git pull)问git merge合并。
  • 如果当前提交和要合并的提交与某个共同祖先(合并基础)不同,则为真正的合并。

git merge什么都不做时,它不会影响索引,因此它不会创建index.lock文件。在其他两种情况下,它确实会影响索引,因此它确实会创建一个index.lock文件。

(请注意,它git checkout还会index.lock在更新索引时创建一个文件。)

git merge在该git fetch步骤完成之前您无法判断是否会执行任何操作,因此无法提前预测是否git pull会创建index.lock文件。

上述推理也适用于您指示git pullrungit rebase而不是 running 的情况git merge。实际参数git rebase取决于git fetch获取的内容,git rebase如果无事可做,则不做任何事情,但在有事可做时会做事(因此可能会创建index.lock)。如果有的话,要做什么取决于git fetch.