Непонятно почему вы спрашиваете об этом.Индекс также называется промежуточной областью или иногда кешем - это все одно и то же.В общем, вам не нужно беспокоиться о том, как он работает внутри, но Git нужно блокировать индекс всякий раз, когда ему нужно обновить индекс.Таким образом, Git создает файл index.lock
в этих случаях.
git pull
запускает git fetch
, за которым следует вторая команда Git, обычно git merge
.
git fetch
, не нужнозаблокируйте индекс (всегда), потому что он никогда не обновляет индекс.
git merge
выполняет одно из нескольких действий в зависимости от того, что вы просите его слить, и какие флаги вы ему даете.Команда git pull
может передать --no-ff
в git merge
, чтобы в некоторых случаях вызвать определенную операцию, но если вы ее не используете, вы получите:
- Ничего, если естьнечего объединять.
- A ускоренная перемотка вперед операция, если текущий коммит строго находится за коммитом, который вы (или
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
.