Подтвердить что ты не робот

Какая разница между post-receive и post-update?

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

4b9b3361

Ответ 1

В документации :

после приема:

Это заменяет крюк <post-update> тем, что он добавляет как старые, так и новые значения всех ссылок в дополнение к их именам.

после обновления:

Квест "post-update" может рассказать, какие головки были нажаты, но он не знает, каковы их исходные и обновленные значения, поэтому это плохое место для ведения журнала old..new. Крючок <post-receive> получает как исходные, так и обновленные значения ref. Вместо этого вы можете рассмотреть его, если они вам понадобятся.

Ответ 2

A недавний коммит для Git 2.2+ (ноябрь 2014), Юнио С Хамано (gitster) упоминать:

Перехватчики pre-receive и post-receive были разработаны как улучшенные по сравнению с старыми стилями update и post-update, которые принимают информацию об обновлении в своей командной строке и ограничены длиной в командной строке предел.

Эта же информация подается от стандартного ввода до крючков до/после приема, чтобы снять это ограничение.

Для этих новых крючков стиля было обязательным полное использование информации об обновлении из стандартного потока ввода. В противном случае они рискуют убить процесс получения пакета с помощью SIGPIPE.

Теперь он добавляет:

Если крючок не хочет просматривать всю информацию, легко отправить его стандартный ввод на /dev/null (возможно, использование ниши для крючка может потребовать знать только тот факт, что был сделан push, без чтобы узнать, какие объекты были добавлены для обновления, которые ссылаются), и это уже сделано с помощью существующих крючков, которые написаны тщательно.

Однако, поскольку нет хорошего способа последовательно перехватывать крючки, которые не потребляют вход полностью (небольшое нажатие может привести к короткой записи обновления, которая может вписываться в буфер канала, к которой может работать процесс receive-pack для записи до того, как у крючка будет возможность выйти без чтения чего-либо, что не приведет к смерти от SIGPIPE receive-pack), это может привести к тяжелой диагностике "один раз в синей луне" phantom сбой.

Поднимите этот "крючки должны полностью использовать свой вход".