Misoca開発チームのmzpです。
開発チームでgitコマンドの使い方について話したら、それぞれ使い方が微妙に違っていることが分かりました。せっかくなので、それぞれの人に、なぜその使い方をしているか聞いてみました。
一時的に変更を退避させる方法
作業を中断するときにするとき、作業中の内容を退避させる方法です。
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
を使うかどうか