Настройте предварительный толчок крючком с помощью Husky, чтобы предотвратить толкание в мастер ветку
Можно ли настроить предварительный толчок крючком с помощью Husky, чтобы предотвратить толкание по мастеру по ошибке?? Хаски документация очень плохая, поэтому я не смог найти ответ.
Прямо сейчас у меня есть хаски для коммитов и толчков:
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"pre-push": "npm run lint"
}
},
"lint-staged": {
"linters": {
"*.{js,json,scss,md}": [
"prettier --write",
"git add"
],
"*.js": [
"eslint -c .eslintrc --fix",
"echo test",
"git add"
]
}
}
1 ответ
Попробуйте сменить крючок предварительного толчка на: "npm run lint && git branch | grep \"*\" | egrep -v \"^* master$\""
Это приведет к git push
потерпеть неудачу, когда текущая ветвь является главной
Что я сделал, так это сделал сценарий bash перед запуском и зафиксировал его в репозитории. Затем вызовите этот скрипт из хаски с параметром хаски.
Это моя хриплая конфигурация внутри package.json (вы можете установить отдельные конфигурации, если хотите)
"husky": {
"hooks": {
"pre-commit": "./commands/pre-commit",
"pre-push": "./commands/pre-push $HUSKY_GIT_STDIN"
}
},
как вы можете видеть, у меня есть 2 сценария, один для предварительного нажатия и один для предварительной фиксации.
А это мой commands/pre-push
сценарий
#!/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 вещи:
- Этот скрипт заблокирует всех, кто пытается нажать на определенную ветку (в моем случае я не хочу, чтобы кто-либо, включая меня, нажимал прямо на
master
а такжеdevelop
филиал). Им нужно работать в своей собственной ветке, а затем создать запрос на перенос. - Этот скрипт заблокирует всех, кто пытается перейти в ветку, отличную от их текущей активной ветки. Например вы в филиале
fix/someissue
но вы по ошибке набираетеgit push origin master
.
Более подробные инструкции вы можете найти в этой статье:
https://github.com/talenavi/husky-precommit-prepush-githooks