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