作成中に、リンクされた出力に埋め込む文字列フィールドを作成します。非常に便利。
git status
コマンドの複雑なsed
/grep
解析以外に、ワークスペース内のファイルがgit
に従って変更されているかどうかを簡単に判断するにはどうすればよいですか?
単純な「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
のような代替手段は、インデックスに対して作業ツリーのみをチェックします(つまり、作業ツリーにもあるステージングされた(ただしコミットされていない)コンテンツは無視されます)。
git ls-files -m
これを見つけるには、git help -a
。
git status --porcelain
は、ナイスな解析可能な出力を与えるようです。
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
git diff --name-only
は同じことをします(もっと直感的になるかもしれません...)