Русский ▾ Topics ▾ Latest version ▾ git-update-ref last updated in 2.53.0

НАЗВАНИЕ

git-update-ref — безопасное обновление имени объекта, хранящегося в ссылке

ОБЗОР

git update-ref [-m <причина>] [--no-deref] -d <ссылка> [<старый-oid>]
git update-ref [-m <причина>] [--no-deref] [--create-reflog] <ссылка> <новый-oid> [<старый-oid>]
git update-ref [-m <причина>] [--no-deref] --stdin [-z] [--batch-updates]

ОПИСАНИЕ

При наличии двух аргументов сохраняет <новый-oid> в <ссылке>, возможно, разыменовывая символьные ссылки. Например, git update-ref HEAD <новый-oid> обновляет голову текущей ветки до нового объекта.

При наличии трёх аргументов сохраняет <новый-oid> в <ссылке>, возможно, разыменовывая символьные ссылки, после проверки того, что текущее значение <ссылки> соответствует <старому-oid>. Например, git update-ref refs/heads/master <новый-oid> <старый-oid> обновляет голову ветки master до <новый-oid>, только если её текущее значение равно <старый-oid>. Вы можете указать 40 "0" или пустую строку в качестве <старого-oid>, чтобы убедиться, что создаваемая вами ссылка не существует.

Последние аргументы — это имена объектов; эта команда без каких-либо параметров не поддерживает обновление символьной ссылки, чтобы она указывала на другую ссылку (см. git-symbolic-ref[1]). Но git update-ref --stdin имеет команды symref-*, так что обычные ссылки и символьные ссылки могут быть зафиксированы в одной транзакции.

Если указан --no-deref, перезаписывается сама <ссылка>, а не результат перехода по символьным указателям.

С -d удаляет указанную <ссылку> после проверки того, что она всё ещё содержит <старый-oid>.

С --stdin update-ref читает инструкции из стандартного ввода и выполняет все изменения вместе. Укажите команды следующего вида:

update SP <ссылка> SP <новый-oid> [SP <старый-oid>] LF
create SP <ссылка> SP <новый-oid> LF
delete SP <ссылка> [SP <старый-oid>] LF
verify SP <ссылка> [SP <старый-oid>] LF
symref-update SP <ссылка> SP <новая-цель> [SP (ref SP <старая-цель> | oid SP <старый-oid>)] LF
symref-create SP <ссылка> SP <новая-цель> LF
symref-delete SP <ссылка> [SP <старая-цель>] LF
symref-verify SP <ссылка> [SP <старая-цель>] LF
option SP <опция> LF
start LF
prepare LF
commit LF
abort LF

С --create-reflog update-ref создаст журнал ссылок для каждой ссылки, даже если обычно он не создаётся.

С --batch-updates update-ref выполняет обновления в пакетном режиме, но позволяет отдельным обновлениям завершаться ошибкой из-за недопустимого или неправильного ввода пользователя, применяя только успешные обновления. Однако системные ошибки, такие как сбои ввода-вывода или проблемы с памятью, приведут к полному сбою всех пакетных обновлений. Любые неудачные обновления будут сообщены в следующем формате:

rejected SP (<старый-oid> | <старая-цель>) SP (<новый-oid> | <новая-цель>) SP <причина-отказа> LF

Заключайте поля, содержащие пробелы, в кавычки, как если бы они были строками в исходном коде C; т.е. окружённые двойными кавычками и с escape-последовательностями с обратной косой чертой. Используйте 40 символов "0" или пустую строку, чтобы указать нулевое значение. Чтобы указать отсутствующее значение, полностью опустите значение и предшествующий ему SP.

В качестве альтернативы используйте -z, чтобы указать в формате с завершением NUL, без кавычек:

update SP <ссылка> NUL <новый-oid> NUL [<старый-oid>] NUL
create SP <ссылка> NUL <новый-oid> NUL
delete SP <ссылка> NUL [<старый-oid>] NUL
verify SP <ссылка> NUL [<старый-oid>] NUL
symref-update SP <ссылка> NUL <новая-цель> [NUL (ref NUL <старая-цель> | oid NUL <старый-oid>)] NUL
symref-create SP <ссылка> NUL <новая-цель> NUL
symref-delete SP <ссылка> [NUL <старая-цель>] NUL
symref-verify SP <ссылка> [NUL <старая-цель>] NUL
option SP <опция> NUL
start NUL
prepare NUL
commit NUL
abort NUL

В этом формате используйте 40 символов "0", чтобы указать нулевое значение, и используйте пустую строку, чтобы указать отсутствующее значение.

В любом формате значения могут быть указаны в любой форме, которую Git распознаёт как имя объекта. Команды в любом другом формате или с повторяющейся <ссылкой> вызывают ошибку. Значения команд:

update

Установить <ссылку> в <новый-oid> после проверки <старого-oid>, если он указан. Укажите нулевой <новый-oid>, чтобы гарантировать, что ссылка не существует после обновления, и/или нулевой <старый-oid>, чтобы убедиться, что ссылка не существует до обновления.

create

Создать <ссылку> с <новый-oid> после проверки того, что она не существует. Указанный <новый-oid> не может быть нулевым.

delete

Удалить <ссылку> после проверки того, что она существует с <старый-oid>, если он указан. Если указан, <старый-oid> не может быть нулевым.

symref-update

Установить <ссылку> в <новая-цель> после проверки <старая-цель> или <старый-oid>, если они указаны. Укажите нулевой <старый-oid>, чтобы гарантировать, что ссылка не существует до обновления.

verify

Проверить <ссылку> на соответствие <старому-oid>, но не изменять её. Если <старый-oid> нулевой или отсутствует, ссылка не должна существовать.

symref-create

Создать символьную ссылку <ссылка> с <новая-цель> после проверки того, что она не существует.

symref-delete

Удалить <ссылку> после проверки того, что она существует с <старая-цель>, если она указана.

symref-verify

Проверить символьную <ссылку> на соответствие <старая-цель>, но не изменять её. Если <старая-цель> отсутствует, ссылка не должна существовать. Может использоваться только в режиме no-deref.

option

Изменить поведение следующей команды, указывающей <ссылку>. Единственным допустимым параметром является no-deref, чтобы избежать разыменования символьной ссылки.

старт

Начать транзакцию. В отличие от нетранзакционного сеанса, транзакция будет автоматически прервана, если сеанс завершится без явной фиксации. Эта команда может создать новую пустую транзакцию, когда текущая уже была зафиксирована или прервана.

prepare

Подготовиться к фиксации транзакции. Это создаст файлы блокировки для всех поставленных в очередь обновлений ссылок. Если одну ссылку не удалось заблокировать, транзакция будет прервана.

коммит

Зафиксировать все обновления ссылок, поставленные в очередь для транзакции, завершая транзакцию.

прервать

Прервать транзакцию, снимая все блокировки, если транзакция находится в состоянии подготовки.

Если все <ссылки> могут быть заблокированы одновременно с соответствующими <старыми-oid>, выполняются все изменения. В противном случае изменения не выполняются. Обратите внимание, что хотя каждая отдельная <ссылка> обновляется или удаляется атомарно, параллельный читатель всё равно может видеть подмножество изменений.

ЖУРНАЛИРОВАНИЕ ОБНОВЛЕНИЙ

Если параметр конфигурации "core.logAllRefUpdates" имеет значение true и ссылка находится в "refs/heads/", "refs/remotes/", "refs/notes/" или является псевдоссылкой, такой как HEAD или ORIG_HEAD; или если существует файл "$GIT_DIR/logs/<ссылка>", то git update-ref добавит строку в файл журнала "$GIT_DIR/logs/<ссылка>" (разыменовывая все символьные ссылки перед созданием имени журнала), описывающую изменение значения ссылки. Строки журнала форматируются как:

старый-sha1 SP новый-sha1 SP коммиттер LF

Где «старый-sha1» — это 40-символьное шестнадцатеричное значение, ранее хранившееся в <ссылке>, «новый-sha1» — это 40-символьное шестнадцатеричное значение <нового-oid>, а «коммиттер» — это имя коммиттера, адрес электронной почты и дата в стандартном формате идентификатора коммиттера Git.

Опционально с -m:

старый-sha1 SP новый-sha1 SP коммиттер TAB сообщение LF

Где все поля такие, как описано выше, а «сообщение» — это значение, предоставленное параметру -m.

Обновление завершится ошибкой (без изменения <ссылки>), если текущий пользователь не может создать новый файл журнала, добавить данные в существующий файл журнала или не имеет доступной информации о коммиттере.

ЗАМЕТКИ

Символьные ссылки изначально были реализованы с использованием символьных ссылок файловой системы. Теперь это устарело, поскольку не все файловые системы поддерживают символьные ссылки.

Эта команда переходит по реальным символьным ссылкам, только если они начинаются с "refs/": в противном случае она просто попытается прочитать их и обновить как обычный файл (т.е. она позволит файловой системе перейти по ним, но перезапишет такую символьную ссылку, указывающую куда-то ещё, обычным именем файла).

СМ. ТАКЖЕ

GIT

Является частью пакета git[1]