Розбір результатів git status- погана ідея, оскільки результат має бути читаним для людини, а не для машинного зчитування. Немає гарантії, що вихід буде залишатися однаковим у майбутніх версіях Git або в інших налаштованих середовищах.
Коментар ультрафіолетових випромінювань стоїть на правильному шляху, але, на жаль, код повернення git statusне змінюється, коли є незаперечні зміни. Однак він надає --porcelainможливість, що призводить git status --porcelainдо форматування результатів у простому для розбору форматі сценаріїв, і залишатиметься стабільним у всіх версіях Git і незалежно від конфігурації користувача.
Ми можемо використовувати порожній вихідний показник git status --porcelainяк індикатор того, що ніяких змін не слід здійснювати:
if [ -z "$(git status --porcelain)" ]; then
# Working directory clean
else
# Uncommitted changes
fi
Якщо нам не байдуже непотрібні файли в робочому каталозі, ми можемо скористатися --untracked-files=noопцією, щоб нехтувати такими:
if [ -z "$(git status --untracked-files=no --porcelain)" ]; then
# Working directory clean excluding untracked files
else
# Uncommitted changes in tracked files
fi
Щоб зробити це більш надійним щодо умов, які насправді призводять git statusдо виходу з ладу без виходу stdout, ми можемо вдосконалити чек на:
if output=$(git status --porcelain) && [ -z "$output" ]; then
# Working directory clean
else
# Uncommitted changes
fi
Варто також зазначити, що, хоча git statusне дає значущого коду виходу, коли робочий каталог нечистий, він git diffнадає --exit-codeможливість, завдяки чому він поводиться аналогічно утиліті diff , тобто виходить зі статусом, 1коли були відмінності і 0коли жодної не було знайдено.
Використовуючи це, ми можемо перевірити наявність нестандартних змін за допомогою:
git diff --exit-code
і поетапно, але не вносив змін із:
git diff --cached --exit-code
Хоча git diffможна звітувати про відслідковувані файли в підмодулях за допомогою відповідних аргументів --ignore-submodules, але, на жаль, здається, що немає ніякого способу, щоб він звітував про незараховані файли у фактичному робочому каталозі. Якщо непотрібні файли в робочому каталозі є актуальними, git status --porcelainце, мабуть, найкраща ставка.