gitコマンド派閥

Misoca開発チームのmzpです。

開発チームでgitコマンドの使い方について話したら、それぞれ使い方が微妙に違っていることが分かりました。せっかくなので、それぞれの人に、なぜその使い方をしているか聞いてみました。

f:id:mzp:20151127192258j:plain

一時的に変更を退避させる方法

作業を中断するときにするとき、作業中の内容を退避させる方法です。

git stash派

git stash で退避させる派です。 そして再開するときは、 git stash pop で退避させた内容を適用します。

使っている理由は「コミットする内容はキレイに保ちたいので、作業中の内容はコミットしたくない」でした。

適当にコミットする派

適当な内容でコミットし、あとで cherry-pick するなり、 rebase するなりする派です。

使っている理由は「退避した内容をリモートのブランチにpushしたいので、普通にコミットしている」でした。

push前の処理

MisocaではRubocopによるコーディングスタイルチェックを行なっています。 Rubocopによるチェックを通らないとCIを通らないので、事前にチェックしておく方法です。

pre-commit派

以下のようなシェルスクリプト.git/hooks/pre-commit に置き、コミット前にチェックする派です。

使っている理由は「コミットするたびに、手動でコマンドを実行したくない」でした。

#!/bin/sh
git diff --cached --name-only --diff-filter=AM | grep '.rb$' | xargs bundle exec rubocop -RDa
exit $?

gitのcommit前にcommit対象のファイルにだけやる派

コミットをする前に対象ファイルをリストアップし、rubocopに渡す派です。

使っている理由は「コミット前にRubocopによるチェックをするかどうかを自分で決めたい」でした。

git status --short | cut -c 3- | xargs bundle exec rubocop -aD

ブランチ内で変更したファイルにだけやる派

ブランチ内で変更したファイルをリストアップし、Rubocopに渡す派です。 前者2つの派閥と異なり、コミットしてある内容に対してRubocopを実行します。

使っている理由は「開発中はRubocopを気にせずに書いていき、レビューを依頼する前にまとめてチェックしたい」でした。

git diff --name-only origin/master  | grep .rb | xargs bundle exec rubocop -aD

その他の方法

上記以外にも以下のような派閥がいました。

その他派閥

これ以外にも、以下のコマンドについても、各自こだわりの方法をもっていました。

  • リモートのレポジトリの内容をどう取得するか
  • コミットするときに -a を使うかどうか