Git

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

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の部分を変えれば良さそう。