Если вы используете бесплатный план для частного репо в Github, возможно, вы не сможете использовать функцию защищенной ветки. Таким образом, вам нужно заблокировать любой pu sh / commit из local. Имейте в виду, что это можно легко обойти с помощью команды --no-verify
.
Я рекомендую вам делать это с помощью хаски вместо python, так как это намного проще, я думаю ..
Это то, что я сделал, чтобы он работал локально и распространялся среди всех участников репо.
Прежде всего, вам нужно установить хаски для управления pre-commit и pre-pu sh hook. Затем я создал сценарий pre-pu sh bash и зафиксировал его в репозитории. Затем вызовите этот скрипт из хука хаски pre-pu sh с параметром хаски.
Это моя конфигурация хаски внутри package.json
(вы можете установить отдельную конфигурацию, если хотите)
"husky": {
"hooks": {
"pre-commit": "./commands/pre-commit",
"pre-push": "./commands/pre-push $HUSKY_GIT_STDIN"
}
},
как видите, у меня есть 2 скрипта, один для pre-pu sh и один для pre-commit.
А это мой commands/pre-push
bash скрипт
#!/bin/bash
echo -e "===\n>> Talenavi Pre-push Hook: Checking branch name / Mengecek nama branch..."
BRANCH=`git rev-parse --abbrev-ref HEAD`
PROTECTED_BRANCHES="^(master|develop)"
if [[ $1 != *"$BRANCH"* ]]
then
echo -e "\n? You must use (git push origin $BRANCH) / Anda harus menggunakan (git push origin $BRANCH).\n" && exit 1
fi
if [[ "$BRANCH" =~ $PROTECTED_BRANCHES ]]
then
echo -e "\n? Cannot push to remote $BRANCH branch, please create your own branch and use PR."
echo -e "? Tidak bisa push ke remote branch $BRANCH, silahkan buat branch kamu sendiri dan gunakan pull request.\n" && exit 1
fi
echo -e ">> Finish checking branch name / Selesai mengecek nama branch.\n==="
exit 0
Скрипт в основном будет делать 2 вещи:
- Этот скрипт будет блокировать любого, кто пытается сделать sh определенную ветку (в моем случае я не хочу, чтобы кто-либо, включая меня, делал пу sh напрямую в ветки
master
и develop
). Им нужно работать в своей собственной ветке, а затем создать запрос на перенос. - Этот сценарий заблокирует любого, кто пытается сделать sh ветку, отличную от их текущей активной ветки. Например, вы находитесь в ветке
fix/someissue
, но затем ошибочно набираете git push origin master
.
Более подробные инструкции вы можете найти в этой статье: https://github.com/talenavi/husky-precommit-prepush-githooks