Mengurai output git statusadalah ide yang buruk karena output dimaksudkan agar dapat dibaca oleh manusia, tidak dapat dibaca mesin. Tidak ada jaminan bahwa output akan tetap sama di versi Git yang akan datang atau di lingkungan yang dikonfigurasi secara berbeda.
Komentar UVV ada di jalur yang benar, tetapi sayangnya kode pengembalian git statustidak berubah ketika ada perubahan yang tidak dikomit. Namun, ia menyediakan --porcelainopsi, yang menyebabkan output git status --porcelaindiformat dalam format skrip yang mudah diurai, dan akan tetap stabil di seluruh versi Git dan terlepas dari konfigurasi pengguna.
Kita dapat menggunakan output kosong git status --porcelainsebagai indikator bahwa tidak ada perubahan yang dilakukan:
if [ -z "$(git status --porcelain)" ]; then
# Working directory clean
else
# Uncommitted changes
fi
Jika kami tidak peduli dengan file yang tidak dilacak dalam direktori kerja, kami dapat menggunakan --untracked-files=noopsi untuk mengabaikannya:
if [ -z "$(git status --untracked-files=no --porcelain)" ]; then
# Working directory clean excluding untracked files
else
# Uncommitted changes in tracked files
fi
Untuk menjadikan ini lebih kuat terhadap kondisi yang sebenarnya menyebabkan git statuskegagalan tanpa hasil stdout, kami dapat mempersempit pemeriksaan ke:
if output=$(git status --porcelain) && [ -z "$output" ]; then
# Working directory clean
else
# Uncommitted changes
fi
Ini juga diperhatikan bahwa, meskipun git statustidak memberikan kode keluar berarti ketika direktori kerja najis, git diffmemberikan --exit-codepilihan, yang membuatnya berperilaku mirip dengan diff utilitas, yaitu, keluar dengan statusnya 1ketika ada perbedaan dan 0ketika tidak ditemukan.
Dengan ini, kita dapat memeriksa perubahan yang tidak dipentaskan dengan:
git diff --exit-code
dan dipentaskan, tetapi tidak melakukan perubahan dengan:
git diff --cached --exit-code
Meskipun git diffdapat melaporkan file yang tidak dilacak dalam submodul melalui argumen yang sesuai --ignore-submodules, sayangnya tampaknya tidak ada cara untuk melaporkannya pada file yang tidak dilacak dalam direktori kerja yang sebenarnya. Jika file yang tidak dilacak dalam direktori kerja relevan, git status --porcelainmungkin itu yang terbaik.