Разница между pre-push и pre-receive хуком в git?

Есть ли разница между pre-push и pre-receive хуком в git с точки зрения варианта использования или рабочей логики?
Единственная разница, которую я мог понять из их документация заключалась в том, какие данные они получают:

1. Pre-Push: информация о том, что должно быть отправлено, предоставляется на стандартный ввод хука строками вида - local ref SP local sha1 SP remote ref SP remote sha1 LF

2.Предварительное получение: для каждой обновляемой ссылки она получает на стандартный ввод строку формата -
старое значение SP новое значение SP имя ссылки LF
Тем не менее, я хотел бы знать, существуют ли конкретные варианты использования для каждого хука или они могут использоваться взаимозаменяемо?


person phoenix    schedule 22.08.2014    source источник


Ответы (1)


Один (pre-push) — это клиент. -side хук, другой (pre-receive) — это серверная ловушка.

В этом аспекте они сильно отличаются, и если вы хотите последовательно применить заданную политику, вы часто делаете это в перехватчике перед получением (на стороне сервера). Таким образом, вам не нужно беспокоиться об развертывании pre-push hook на каждом клиенте.

Помните: хуки локальны для репозитория, что означает pre-push hook нельзя легко распространить на любой нисходящий репозиторий. Но если все нижестоящие репозитории ссылаются на одно и то же вышестоящее репозиторий, хук перед получением может применяться ко всем им.

person VonC    schedule 22.08.2014
comment
Хорошо. Тогда pre-push — это хук на стороне клиента, а pre-receive — хук на стороне сервера, я полагаю? - person phoenix; 22.08.2014
comment
@user1783805 user1783805 Я добавил понятие нижестоящего репо: это важно. - person VonC; 22.08.2014
comment
Большое спасибо. Четкий и лаконичный ответ!! - person phoenix; 22.08.2014
comment
@user1783805 user1783805 Я также ответил на ваш вопрос по аналогичной теме Создание глобальных перехватчиков предварительной фиксации для всей команды - person VonC; 22.08.2014
comment
Должен ли я использовать pre-push или pre-receive для некоторых тестов на линтинг (например, flake8), где я не хочу использовать хуки pre-commit? Я хочу, чтобы вся команда проводила тесты, немного смущена этим. Спасибо. - person Abhijeet Khangarot; 14.06.2018
comment
Я хочу, чтобы вся команда проводила тесты: тогда это хук перед получением (на стороне сервера), который отклонит отправку, если линтер не сработает. - person VonC; 14.06.2018