LoginSignup
5
0

未解決のコンフリクトを検知するgit-hooks(pre-commit)をすべてのリポジトリに適用する

Last updated at Posted at 2022-05-23

Git にはhooksといって特定のイベントが発生するたびに自動的にスクリプトを実行する機能があります。
これらを使用すると、Gitの内部動作をカスタマイズし、開発ライフサイクルの重要なポイントでカスタマイズ可能なアクションをトリガーできます。
具体的な利用シーンとしては、コミット時にコードのフォーマットやプッシュ時にテストコードを実行するなどです。

hooks は以下の場所にサンプルが入っています。
代表的なものとして「pre-commit」(コミット時にスクリプトを実行)や「pre-push」(プッシュ時にスクリプトを実行)があります。

$ cd /PATH/TO/<Gitリポジトリ>/.git/hooks/
$ ls -1
applypatch-msg.sample
commit-msg.sample
fsmonitor-watchman.sample
post-update.sample
pre-applypatch.sample
pre-commit.sample
pre-merge-commit.sample
pre-push.sample
pre-rebase.sample
pre-receive.sample
prepare-commit-msg.sample
push-to-checkout.sample
update.sample

基本的にはGitリポジトリ単位で使用することになるのですが、グローバルにも反映できます。
※Git の 2.9.5 から使用できるようになりました。
参考「githooks

今回は自分用のメモなので、コンフリクト発生時に修正漏れがないかどうかをチェックするスクリプトをコミット時に実行します。

1. pre-commitファイルを作成

mkdir ~/githooks && touch ~/githooks/pre-commit && chmod +x ~/githooks/pre-commit

2. pre-commitを編集

未解決のコンフリクトがないかをチェックします。

~/githooks/pre-commit
#!/bin/sh

# Check for merge conflicts

# Tested on Linux and Mac

# Simple check for merge conflics
conflicts=`git diff --cached --name-only -G"<<<<<|=====|>>>>>"`


# Something went wrong
if [[ -n "$conflicts" ]]; then
    echo
    echo "未解決のコンフリクトを解消してください:"

    for conflict in $conflicts; do
        echo $conflict
    done;

    exit 1;
fi

exit 0

3. グローバルに設定を反映

githooks のデフォルトディレクトリを変更します。

git config --global core.hooksPath ~/githooks
5
0
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
5
0