Почему мой хук предварительной фиксации Git не срабатывает в клонированном репозитории?

#git #pre-commit-hook

#git #перехват предварительной фиксации

Вопрос:

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

 /apps/opt/git/myrepo.git 
  

Я отредактировал хук предварительной фиксации и изменил, как показано ниже:

 #!/bin/sh -x
if [ $LOGNAME -ne bala ]; then
   echo  "You are not allowed"
   exit 1;
fi
  

Если я клонирую этот репозиторий и выполняю действие фиксации с использованием другого пользователя, он не выдает никакого сообщения, а фиксирует его.
Почему мой коммит не вызывает pre-commit перехват?

Также я мог видеть в моем клонированном репозитории в .git/hooks каталоге, что перехват « pre-commit » отсутствует, я вижу только шаблоны по умолчанию.

Кто-нибудь может здесь помочь?

Комментарии:

1. Помогли ли вам советы от baluchen в решении проблемы? Если да, не могли бы вы принять решение (используя кнопку с галочкой)?

Ответ №1:

Несколько элементов ответа здесь:

  • Перехваты не распространяются через клоны, они являются чисто локальными для репозитория
  • если вы клонируете репозиторий, в котором вы определяете перехват, вы не найдете указанный перехват
  • если вы хотите предотвратить фиксацию в вашем локальном репозитории, вам нужен pre-commit (как вы сделали) в локальном репозитории. Убедитесь, что это исполняемый файл.
  • если вы хотите заблокировать любую фиксацию, выполняемую кем-либо, кроме ‘bala’, вам нужен pre-receive на стороне сервера

Комментарии:

1. VonC, спасибо за ваше обновление. Я не знал, что перехваты никогда не поставляются с clone. Есть ли способ запретить пользователям удалять этот перехват? Я хочу сохранить эти перехваты в центральном расположении. Сообщите, можете ли вы предоставить возможный способ совместного использования скрипта перехвата.

2. @baluchen: вот почему я упомянул перехват на стороне сервера, подобный pre-receive : вы не можете запретить пользователю делать все, что он / она хочет, в своем локальном репозитории. Но, по крайней мере, вы можете отклонить коммиты, отправленные в ваше центральное репозиторий, если указанные коммиты не соответствуют определенным критериям.

3. Спасибо VonC. Я попробую этот вариант