Çıktısının ayrıştırılması git status
kötü bir fikir çünkü çıktının makine tarafından okunabilir değil, insan tarafından okunabilir olması amaçlanmıştır. Çıktının Git'in gelecekteki sürümlerinde veya farklı şekilde yapılandırılmış ortamlarda aynı kalacağı garantisi yoktur.
UVV'lerin yorumu doğru yolda, ancak ne yazık ki kabul git status
edilmeyen değişiklikler olduğunda dönüş kodu değişmiyor. Bununla birlikte, --porcelain
çıktının git status --porcelain
komut dosyaları için ayrıştırılması kolay bir biçimde biçimlendirilmesine neden olan ve Git sürümlerinde ve kullanıcı yapılandırmasından bağımsız olarak sabit kalmasını sağlayan bir seçenek sunar .
git status --porcelain
Yapılması gereken hiçbir değişiklik olmadığının göstergesi olarak boş çıktıları kullanabiliriz :
if [ -z "$(git status --porcelain)" ]; then
# Working directory clean
else
# Uncommitted changes
fi
Çalışma dizinindeki izlenmemiş dosyaları umursamıyorsak, bunları --untracked-files=no
göz ardı etmek için bu seçeneği kullanabiliriz :
if [ -z "$(git status --untracked-files=no --porcelain)" ]; then
# Working directory clean excluding untracked files
else
# Uncommitted changes in tracked files
fi
Koşullardan karşı bu daha sağlam hale getirmek için aslında neden git status
çıktı olmadan başarısız stdout
, çek için daraltabilirsiniz:
if output=$(git status --porcelain) && [ -z "$output" ]; then
# Working directory clean
else
# Uncommitted changes
fi
Ayrıca git status
, çalışma dizini kirli olduğunda anlamlı bir çıkış kodu vermese de , bu farkın ne zaman ve ne zaman bulunmadığına göre , durumun diff yardımcı programına benzer davranmasını sağlayan bir seçenek git diff
sağladığını --exit-code
belirtmek önemlidir .1
0
Bunu kullanarak, etiketlenmemiş değişiklikleri aşağıdakilerle kontrol edebiliriz:
git diff --exit-code
ve aşamalı, ancak şunlarla değişiklik yapmadı:
git diff --cached --exit-code
Her ne kadar git diff
alt modüllerdeki takip edilmeyen dosyalar için uygun argümanlar üzerinden rapor verebilse de --ignore-submodules
, maalesef asıl çalışma dizinindeki takip edilmeyen dosyalar hakkında rapor vermesinin mümkün olmadığı görülmektedir. Çalışma dizinindeki izlenmeyen dosyalar alakalıysa, git status --porcelain
muhtemelen en iyi bahis budur.