Подтвердить что ты не робот

Какой простой способ обнаружить измененные файлы в рабочем пространстве Git?

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

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

4b9b3361

Ответ 1

Если вам просто нужна простая "Есть ли отличия от 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, будут проверять только рабочее дерево от индекса (т.е. Они будут игнорировать любой поэтапный (но нефиксированный) контент, который также находится в рабочем дереве).

Ответ 2

git ls-files -m

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

Ответ 3

git status --porcelain, кажется, дает хороший результат синтаксического анализа.

Ответ 4

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

Ответ 5

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

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