6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ルール違反のgitブランチ名をpre-commitで防ぐ

Last updated at Posted at 2019-01-10

チームでgitを用いて開発する際、ブランチ名にある一定のルールを設けることがあると思います。

ただ、周知しても忘れるのが人間。
ドキュメントを読まないのも人間。

なので、自動でブランチ名をチェックして、不正な場合はコミットをさせないように設定できます。

前提

※macOSでの動作を確認しています。Windows等の場合は少し書き方が変わると思います(すみません、未検証です)。

pre-commitファイルを用意

クローンしているレポジトリのルートに移動してください。

mkdir -p .git/hooks
touch pre-commit

viではなくてもいいですが、好きなエディタで以下のファイルを編集してください。

2019/01/18追記 インタラクティブリベースで困るのでHEADを追加しました。

.git/hooks/pre-commit
#!/usr/bin/env bash

readonly BRANCH_NAME_RULES='^(HEAD|master|develop|release\/(.+)|(?:bugfix|feature|hotfix)\/PROJECT-[0-9]+(?:-.*)*)$'
readonly BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
readonly BRANCH_NAME_LENGTH=$(echo ${BRANCH_NAME} | grep -E ${BRANCH_NAME_RULES} | wc -c | tr -d ' ')
if [ ${BRANCH_NAME_LENGTH} -eq 0 ] ; then
    echo ""
    echo -e '\033[0;31;43m ERROR! \033[m in pre-commit hook.'
    echo ""
    echo -e "Your branch name "'\033[1m'${BRANCH_NAME}'\033[m'" is not suitable for our rule."
    echo "Please fix your branch name before commiting!"
    echo ""
    echo "Abort commiting."
    echo ""
    exit 1
fi

BRANCH_NAME_RULES がルールチェック用の正規表現です。
このファイルの例では、

  • master
  • develop
  • release/hogehoge
  • bugfix/PROJECT-123
  • bugfix/PROJECT-123-foo
  • feature/PROJECT-456
  • feature/PROJECT-456-bar
  • hotfix/PROJECT-789
  • hotfix/PROJECT-789-baz
  • HEAD

などが許可されます。

https://www.debuggex.com/ で図解すると、
image.png
こんな感じです。

pre-commitに実行権限を付与

chmod +x pre-commit

これで準備完了です。

テスト

image.png

ブランチ名 feature/payment (pre-commit設定前に作成)にコミットしようとすると、エラーが表示されてコミットがキャンセルされます。

問題点

  • クローンする度に設定しなければならない
  • 設定してくれるかどうかは人次第

1行コマンドで自動設定する、といったいい方法を考えないとですね。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?