Проверка на наличие грязного индекса или неотслеживаемых файлов с помощью Git - PullRequest
232 голосов
/ 17 апреля 2010

Как я могу проверить, есть ли какие-либо незафиксированные изменения в моем git-хранилище:

  1. Изменения добавлены в индекс, но не зафиксированы
  2. неотслеживаемых файлов

из скрипта?

git-status, кажется, всегда возвращает ноль в git версии 1.6.4.2.

Ответы [ 14 ]

1 голос
/ 05 апреля 2013

Это более дружественный вариант оболочки, позволяющий выяснить, существуют ли в хранилище любые неотслеживаемые файлы:

# Works in bash and zsh
if [[ "$(git status --porcelain 2>/dev/null)" = *\?\?* ]]; then
  echo untracked files
fi

Это не ветвится второй процесс, grep, и не нуждается в проверке того, находитесь ли вы в git-репозитории или нет. Что удобно для подсказок оболочки и т. Д.

0 голосов
/ 08 марта 2017

Вот лучший, самый чистый способ. По какой-то причине выбранный ответ у меня не сработал, он не собирал инсценированные изменения, которые были новыми файлами, которые не были зафиксированы.

function git_dirty {
    text=$(git status)
    changed_text="Changes to be committed"
    untracked_files="Untracked files"

    dirty=false

    if [[ ${text} = *"$changed_text"* ]];then
        dirty=true
    fi

    if [[ ${text} = *"$untracked_files"* ]];then
        dirty=true
    fi

    echo $dirty
}
0 голосов
/ 04 декабря 2015

Самый простой автоматический тест, который я использую для обнаружения грязного состояния = любых изменений, включая неотслеживаемые файлы :

git add --all
git diff-index --exit-code HEAD

Примечание:

  • Без add --all diff-index не замечает неотслеживаемых файлов.
  • Обычно я запускаю git reset после проверки кода ошибки, чтобы восстановить все обратно.
0 голосов
/ 24 августа 2015

Может быть, лучшая комбинация ответов из этой темы ... но это работает для меня ... для вашего .gitconfig '[alias] раздела ...

          # git untracked && echo "There are untracked files!"
untracked = ! git status --porcelain 2>/dev/null | grep -q "^??"
          # git unclean && echo "There are uncommited changes!"
  unclean = ! ! git diff --quiet --ignore-submodules HEAD > /dev/null 2>&1
          # git dirty && echo "There are uncommitted changes OR untracked files!"
    dirty = ! git untracked || git unclean
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...