web-dev-qa-db-ja.com

Gitワークスペースで変更されたファイルを検出する簡単な方法は何ですか?

作成中に、リンクされた出力に埋め込む文字列フィールドを作成します。非常に便利。

git statusコマンドの複雑なsed/grep解析以外に、ワークスペース内のファイルがgitに従って変更されているかどうかを簡単に判断するにはどうすればよいですか?

37
Jamie

単純な「HEADとの違いはありますか?」

git diff-index --quiet HEAD

終了コードが0の場合、違いはありませんでした。

「HEADからどのファイルが変更されたか」が必要な場合:

git diff-index --name-only HEAD

「HEADからどのファイルが変更され、どのように変更(追加、削除、変更)されたか」が必要な場合:

git diff-index --name-status HEAD

名前の変更(およびコピー)の検出が必要な場合は、-M(および-C)を追加します。

これらのコマンドは、ステージングされたコンテンツ(インデックスにあるもの)と作業ツリーのファイルの両方をチェックします。 git ls-files -mのような代替手段は、インデックスに対して作業ツリーのみをチェックします(つまり、作業ツリーにもあるステージングされた(ただしコミットされていない)コンテンツは無視されます)。

59
Chris Johnsen

git ls-files -m

これを見つけるには、git help -a

git status --porcelainは、ナイスな解析可能な出力を与えるようです。

22
MDCore

Gitフックの場合、このコマンドは便利です

git diff-index --exit-code --ignore-submodules HEAD

例えば

//run some static analysis check that can change the code
something_changed=`git diff-index --exit-code --ignore-submodules HEAD`
if [ -n "$something_changed" ]
then
    echo >&2 "Something changed in $local_ref, not pushing"
    exit 1
fi
3
Maragues

git diff --name-onlyは同じことをします(もっと直感的になるかもしれません...)

2
Yinon Ehrlich