git status -s
ツリーに追跡されていないファイルがあるかどうかを確認するために見たい出力です。次のテストを試しましたが、正規表現が一致しません。なぜできないの?
$ git status -s
## master
M updated-file
?? new-file
$ [[ $(git status -s) =~ ^\?\? ]] || echo "no match"
no match
また、追加/修正/削除されたファイルを同じ方法でテストできることを願っています。私は通常^\s*[AMD]
この目的のためにこのようなものを使用しますが、それも機能しません。何を提供しますか?
答え1
文字列の各行ではなく文字列全体を一致させるので、実際にはその正規表現##
内でテストしています。
grep
より良い選択です:
if ! git status -s | grep -q '^??'; then
echo "no match"
fi
要求に応じて追加/変更/削除に対して同じことを行うことができます。
git status -s | grep '^ *[AMD]'
git status --porcelain
もう少し構文解析指向の方法(このオプションは1.7.0に初めて登場)を見ることもできます。