Git post-receive hook не работает, но пост-фиксация работает

Короче говоря, я создал тестовое репо на github, клонировал его локально на моей Linux-машине. Создал крюк post-commit со следующим содержимым:

#!/bin/bash echo Test message 

Добавлено perms 777 для захвата, изменил файл, и когда я выполнил коммит, я получил сообщение на консоли. Таким образом, пост-фиксация, похоже, работает. Я теперь переименовал крючок из пост-фиксации в пост-прием, но после нажатия я не получаю сообщения. Я продолжаю выполнять и нажимать на мастер, и никакое сообщение не отображается. Крючок такой же, имеет 777, имеет один и тот же контент, поэтому я не могу понять, почему, поскольку пост-фиксация работает, но как пост-прием, это не так. Мне что-то не хватает?

Предположим, у вас есть два репозитория

  1. локальный (в вашем случае клонированный из github в вашей машине)
  2. Происхождение (репо на github)

post-commit работает, как показано ниже

Вы помещаете post-commit в свое местное репо, и он будет выполняться каждый раз после того, как вы совершите транзакцию в этом локальном репо. Так что это работает в вашем случае.

pos-receive работает, как показано ниже

Этот крюк предназначен для запуска после получения коммитов. Поэтому, если вы поместите это в свое местное репо, это не сработает. Этот крючок должен находиться в репо-источнике. И всякий раз, когда вы нажимаете на это происхождение, после получения ваших коммитов этот hoook будет выполняться по происхождению. Короче говоря, post-receive будет работать на репо, которое получает фиксации от другого репо. (В этом случае репо на github). Надеюсь, это помогло.

Короче говоря, post-commit – это крючок на стороне клиента, тогда как post-receive – это крючок на стороне сервера и должен быть установлен в удаленном репозитории, на который вы нажимаете.

Чтобы уточнить, git будет искать крючки на стороне клиента только в вашем каталоге .git/hooks локального git-репозитория и будет запускать их только для этого локального репо. Аналогично, git будет искать серверные перехватчики только в каталоге ваших крючков удаленного хранилища и будет запускать их всякий раз, когда любое репо пытается нажать на него. Вы можете узнать больше о том, что есть в документах git hooks

«Исправить» означает mv ваш крюк post-receive в каталог hooks вашего удаленного (исходного) репозитория, который можно получить через git remote -v

Обратите внимание: если вы используете GitHub или тому подобное, доступ к установке перехватчиков запрещен по соображениям безопасности, например, см. Здесь , и вам нужно будет обратиться к WebHooks или тому подобному.