Git pre-push не запускается - PullRequest
0 голосов
/ 08 июня 2018

Я прочитал все вопросы до переполнения stackoverflow и следовал каждой отдельной инструкции, но мой хук не срабатывает при вызове git push

, вот мой хук

#!/bin/bash

protected_branch='master'
echo "Pre push hook is running..." # Even this line I can't see it in the output
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [ $protected_branch = $current_branch ]
then
        echo "You can't push to master directly"
        exit 1 # push will not execute
else
        exit 0 # push will execute
fi

Iтакже удостоверился, что файл ловушек называется pre-push, и я удостоверился, что у него есть разрешения на выполнение.

Я действительно не вижу, что мне не хватает, все, что я хочу сделать, - это просто запустить ловушку.и я разберусь с остальными.

Примечание: у меня есть этот репозиторий и подключается к Debian 8 Джесси

1 Ответ

0 голосов
/ 08 июня 2018

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

Вот ловушка, основанная на шаблоне pre-push.sample .Вы можете найти локальную копию pre-push.sample в .git/hooks.

#!/bin/sh

protected_branch='refs/heads/master'
echo "Pre push hook is running..." # Even this line I can't see it in the output

while read local_ref local_sha remote_ref remote_sha
do
    if [ "$remote_ref" = $protected_branch ];then
        echo "You can't push to master directly"
        exit 1 # push will not execute
    fi
done

exit 0

Назовите ее pre-push, предоставьте ей права на выполнение и поместите ее в .git/hooks локального репозитория.

Вот образец pre-receive.Он должен быть развернут в .git/hooks удаленного репозитория.

#!/bin/sh

protected_branch='refs/heads/master'
while read old_value new_value ref_name;do
    if [ "$ref_name" = $protected_branch ];then
        echo "You can't push to master directly"
        exit 1
    fi
done

exit 0

Ссылка: pre-push , pre-receive

...