[dev: pre-script] Deny commit and push to specific branch by pre-script in .git/hooks - #git
.git/hooks/ 配下の pre-push や pre-commit に記述することで、ローカルの Git クライアントから当該リポジトリの特定ブランチへの PUSH / COMMIT 等を抑止するスクリプト。
GitHub-Flow では基本的に origin/master や origin/develop は clone や fetch & merge はするが 直接 commit push はしない(基本的に PR → レビュー → 管理者によるマージ受け入れの流れで運用するため)。この運用を徹底するためのスクリプト。
ローカルクライアントへの直設定なので、作業者の分だけこの設定が必要になる。抜け漏れミス防止するために、ホスティングサーバ上でも origin/master origin/develop への PUSH 抑止設定ができるならしておくべき。
cd {githome}/.git/hooks/
vi pre-push
chmod 775 pre-push
#!/bin/sh
# if the branch is master, then fail.
branch="$(git symbolic-ref HEAD 2>/dev/null)" || \
"$(git describe --contains --all HEAD)"
if [ "${branch##refs/heads/}" = "master" ] || [ "${branch##refs/heads/}" = "develop" ]; then
echo "DENY PUSH TO MASTER!! FXXK!!"
exit 1
fi
cd {githome}/.git/hooks/
vi pre-commit
chmod 775 pre-commit
#!/bin/sh
# if the branch is master, then fail.
branch="$(git symbolic-ref HEAD 2>/dev/null)" || \
"$(git describe --contains --all HEAD)"
if [ "${branch##refs/heads/}" = "master" ] || [ "${branch##refs/heads/}" = "develop" ]; then
echo "DON'T COMMIT TO MASTER!! FXXK!!"
exit 1
fi