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

时间:2018-10-05 11:30:32

标签: git github

在git仓库的.git文件夹上创建

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

1 个答案:

答案 0 :(得分:4)

不清楚您问的是为什么。索引也称为暂存区,有时也称为高速缓存,它们都是相同的东西。通常,您不必担心它在内部如何工作,但是Git需要在需要更新索引时锁定索引。因此,在这种情况下,Git会创建一个index.lock文件。

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

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

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

  • 没有什么可以合并的。
  • 如果当前提交严格位于您(或git pull)要求git merge合并的提交之后,则执行快进操作。
  • 如果当前提交和要合并的提交与某些共同祖先(合并基础)不同,则为真正的合并。

git merge不执行任何操作时,不会影响索引,因此不会创建index.lock文件。在其他两种情况下,它确实会影响索引,因此会创建一个index.lock文件。

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

git merge步骤完成之前,您无法确定git fetch是否会执行任何操作,因此无法预先预测git pull是否将创建index.lock文件

以上情况也适用于您指示git pull运行git rebase而不是运行git merge的情况。 git rebase的实际参数取决于git fetch所获取的内容,并且git rebase在无事可做的情况下什么也不做,但是会做事(因此可能创建index.lock)有事情要做的时候。做什么(如果有的话)取决于git fetch的结果。