Posted at

Gitのコミット時に自動でコードを整形する

More than 1 year has passed since last update.

C++のコードをコミットする時にclang-formatというツールで整形する例。

Gitで管理しているプロジェクトの「.git/hooks」配下にpre_commitを以下の内容で置く。

(pre_commitに実行権限を与えること)

if type "clang-format" > /dev/null 2>&1

then
untracked_src=$(git ls-files '*.cpp' '*.c' '*.hpp' '*.h' --others --exclude-standard)
for src in $untracked_src; do
clang-format -i $src
done

unstaged_src=$(git diff --name-only -- '*.cpp' '*.c' '*.hpp' '*.h')
for src in $unstaged_src; do
clang-format -i $src
done

staged_src=$(git diff --name-only --cached -- '*.cpp' '*.c' '*.hpp' '*.h')
for src in $staged_src; do
clang-format -i $src
git add $src
done
fi

他のフォーマッターを利用するならclang-formatの部分を変えれば良さそう。