3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

gitコマンドでワーキングツリーがクリーンかどうか判定する

Posted at

用語について

  • ワーキングツリー …… リポジトリからチェックアウトされたファイルのツリー
  • クリーン …… ワーキングツリーの内容がHEADが指すリビジョンと一致していることを表す
  • ダーティー …… ワーキングツリー内に、コミットされていない変更が含まれていることを表す

やり方

おそらく、可能なやり方はたくさん考えられると思いますが、ふつうはこれを使えばよさそうというやり方を紹介します。
また、シェルスクリプトなどで機械的に判定を行う上で便利なやり方を紹介します。

なお、動作確認時のgitのバージョンはv2.17.1です。

gitで追跡されていないファイルを含めて判定する

当然 git status でわかるわけですが、そのままでは機械的に扱うには少々不便です。
--short|-s オプションを使うと出力がよりシンプルな扱いやすい形になります。

$ git status -s
 D bar.txt
D  baz.txt
 M foo.txt
?? new.txt

上の出力結果で、 D は削除されたものを、 M は差分のあるファイルを、 ?? はuntrackedな(git管理外の)ファイルを表しています。
ワーキングツリーがクリーンなときには何も表示されないところが、コマンドで判定する上で嬉しいポイントです。

従って、シェルスクリプト上では例えば次のように判定できます:

判定例
if [ $(git status --short | wc -l) -ne 0 ]; then
  # dirty!
fi

他のやり方としては、 git add コマンドを -N|--intent-to-add オプションを付けて実行した上で、 git diff コマンドを使う、といったやり方もあるようです。
こちらについては、後掲のreboooot․netさんの記事をご覧ください。

gitで追跡されているファイルのみを対象とする

この場合、 git status だけでなく、 git diff コマンドでも判別できます。
機械的な正否判定には git diff --quiet が便利です。

判定例
if ! git diff --quiet; then
  # dirty!
fi

--quiet オプションを付けると一切の出力をせず、 --exit-code オプション同様に差分のあるときに exit 1 してくれるので、検出が可能です。

参考記事

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?