Розбір результатів 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
це, мабуть, найкраща ставка.