Какой простой способ обнаружить измененные файлы в рабочей области Git? - PullRequest
31 голосов
/ 07 октября 2010

Во время make я создаю строковые поля, которые я встроил в связанный вывод.Очень полезно.

Кроме сложного sed / grep разбора команды git status, как я могу легко определить, были ли файлы в рабочей области изменены в соответствии с git?

Ответы [ 5 ]

47 голосов
/ 10 октября 2010

Если вы просто хотите получить простое «Есть ли отличия от HEAD?»:

git diff-index --quiet HEAD

Если код выхода равен 0, то различий не было.

Если вы хотите«Какие файлы изменились с HEAD?»:

git diff-index --name-only HEAD

Если вы хотите «Какие файлы изменились с HEAD и каким образом они изменились (добавлены, удалены, изменены)?»:

git diff-index --name-status HEAD

Добавьте -M-C), если требуется обнаружение переименования (и копирования).

Эти команды будут проверять как поэтапное содержимое (что находится в индексе), так и файлыв рабочем дереве.Альтернативы, такие как git ls-files -m, будут проверять только рабочее дерево по индексу (т. Е. Они будут игнорировать любое поэтапное (но незафиксированное) содержимое, которое также находится в рабочем дереве).

36 голосов
/ 07 октября 2010

git ls-files -m

Чтобы найти это, вы можете просмотреть git help -a.

21 голосов
/ 07 октября 2010

git status --porcelain, кажется, дает хороший вывод для анализа.

2 голосов
/ 06 октября 2014

git diff --name-only делает то же самое (может быть более интуитивным ...)

0 голосов
/ 04 апреля 2019

Для git-хуков я нашел эту команду полезной

git diff-index --exit-code --ignore-submodules HEAD

Например

//run some static analysis check that can change the code
something_changed=`git diff-index --exit-code --ignore-submodules HEAD`
if [ -n "$something_changed" ]
then
    echo >&2 "Something changed in $local_ref, not pushing"
    exit 1
fi
...