Git push опция для прерывания, если ветка на удаленном компьютере не совпадает с заданным идентификатором коммита? - PullRequest
0 голосов
/ 25 февраля 2019

Есть ли какая-нибудь опция git push (возможно, с некоторым неясным синтаксисом) для прерывания ее работы, если ветвь на стороне сервера не совпадает с каким-либо указанным идентификатором коммита?

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

1 Ответ

0 голосов
/ 25 февраля 2019

Есть.Это не слишком неясно: это git push --force-with-lease.

То, как вы сообщаете двум задействованным Gitам, какой хеш-идентификатор вы ожидаете от другого Git, - это установить что-то в ваш Git.В вашем Git вы указываете имя для удаленного отслеживания .Например, я создал слегка глупое / бессмысленное имя zilly в фиктивном репозитории, который я держу для тестирования:

git push origin master:zilly

Теперь мой локальный Git имеет origin/zilly (полное имя refs/remotes/origin/zilly), содержащее хешID Я думаю, что они - origin - имеют свои refs/heads/zilly, поэтому:

git push --force-with-lease --delete origin zilly

Если бы я обновил их zilly с тех пор (любыми средствами), или изменил свое представление об ихzilly, я получаю:

 ! [rejected]        (delete) -> zilly (stale info)
error: failed to push some refs to <url>

Обратите внимание, что (а) это работает для регулярных принудительных обновлений и (б) вы можете записать операцию удаления различными способами;ключ по-прежнему это --force-with-lease, что означает, что вы должны иметь origin/<em>whatever</em> в вашем локальном хранилище.Это довольно удобно, поскольку git fetch origin --prune поддерживает ваш локальный репозиторий в актуальном состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...