Git-сервер и клиент мало чем отличаются ;-). Поэтому все перехваты, которые запускаются на «клиенте», будут выполняться на «сервере», если, конечно, на сервере происходят одни и те же события.
Например, update
hook, полностью попадает в эту категорию. Он вызывается после того, как ветка была обновлена, и если этот хук возвращает ненулевой статус, обновление отменяется. Так что вы можете поместить туда компиляцию и вернуть ее результат. Все сообщения, которые вы печатаете с крючка, будут показаны пользователю, который фиксирует их на своей консоли. Это очень удобно, так как он может видеть сообщения об ошибках из вашего скрипта сборки и исправлять их.
Даже если вы запустили две компиляции одновременно, репозиторий git не потеряет коммиты из-за использования аргумента «старого refname» в своем хуке обновления. Тем не менее, может случиться так, что коммиттер ожидает компиляции, и его реф не будет сдвинут, потому что кто-то другой вместо этого получил его.
Стандартный репозиторий git содержит хороший пример update
ловушки (с именем update.sample
). Обратитесь к нему, если вам нужен точный пример.
Однако, если компиляция слишком длинная, а скорость коммитов превышает частоту, с которой вы можете скомпилировать код, возможно, вы захотите использовать более продвинутые решения. Комментаторы предлагают искать в Google "непрерывную интеграцию".