Mengurai output git status
adalah 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 status
tidak berubah ketika ada perubahan yang tidak dikomit. Namun, ia menyediakan --porcelain
opsi, yang menyebabkan output git status --porcelain
diformat 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 --porcelain
sebagai 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=no
opsi 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 status
kegagalan 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 status
tidak memberikan kode keluar berarti ketika direktori kerja najis, git diff
memberikan --exit-code
pilihan, yang membuatnya berperilaku mirip dengan diff utilitas, yaitu, keluar dengan statusnya 1
ketika ada perbedaan dan 0
ketika 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 diff
dapat 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 --porcelain
mungkin itu yang terbaik.