Как `receive.denyCurrentBranch=updateInstead` взаимодействует с индексом?
receive.denyCurrentBranch
Опция config контролирует, что произойдет, если вы нажмете на ветку репо, которая является checkout.
По умолчанию он отклоняет его (поэтому обычно вы продвигаетесь только к пустым репозиториям, у которых нет веток оформления заказа).
Это можно отключить через ignore
или же warn
,
Другой вариант updateInstead
,
Что это делает, что если HEAD
и рабочий каталог одинаковы, а ветка HEAD
, как рабочий каталог, так и ветка / HEAD
обновляются одновременно.
Если рабочий каталог отличается от HEAD
толчок отклонен.
Это полезно, например, для отправки на веб-серверы.
У меня вопрос: эта опция вообще взаимодействует с индексом?
Индекс обновляется? Что, если HEAD
и рабочий каталог совпадает, но не Index
?
1 ответ
Индекс обновляется? Что, если HEAD и рабочий каталог совпадают, но не Index?
В коммите 0855331 (git 2.4.0-rc0, декабрь 2014 г.) четко сказано:
когда
receive.denyCurrentBranch
установлен вupdateInstead
push, который пытается обновить ветвь, которая в настоящий момент извлечена, принимается только тогда, когда индекс и рабочее дерево точно соответствуют извлеченной в данный момент фиксации, и в этом случае индекс и рабочее дерево обновляются в соответствии с отправленной фиксацией.
В противном случае толчок отклоняется.
Хотя тот же коммит ввел push-to-checkout
крюк.
Этот хук может быть использован для настройки логики "push-to-deploy".
Хук получает фиксацию, с которой будет обновляться кончик текущей ветви, и может решить, какие локальные изменения являются приемлемыми и как обновить индекс и рабочее дерево, чтобы соответствовать обновленной кончику текущей ветви.
Это дает немного гибкости в отношении индекса.
Commit 1a51b52, git 2.4.0-rc2, апрель 2015 г., повторяет это:
настройка
receive.denycurrentbranch
вupdateinstead
и проталкивание в текущую ветвь, когда рабочее дерево и индекс действительно чисты, должно сбросить рабочее дерево и индекс, чтобы они соответствовали дереву выдвинутого коммита.