В Git, как получить подробный список изменений файлов из одной ревизии в другую?

Я использую Git-репозиторий на своем сервере для создания версий файлов пользовательских данных, отправляемых на сервер. Я заинтересован в получении списка измененных файлов между любыми двумя ревизиями.

Я знаю о git diff --name-only <rev1> <rev2>, но это только дает мне список имен файлов. Особенно меня интересуют переименования и копии. В идеале вывод будет примерно таким:

updated:  userData.txt
renamed:  picture.jpg -> background.jpg
copied:   song.mp3 -> song.mp3.bkp

Является ли это возможным? --name-status также не указывает на переименования и копии.

2 ответа

Решение
git diff --name-status -C <rev1> <rev2>

должно быть ближе к тому, что вы ищете.

--name-status будет отображать имена файлов и их соответствующий статус:

(A|C|D|M|R|T|U|X|B)

Добавлен (A), Скопирован (C), Удален (D), Модифицирован (M), Переименован (R),
тип (то есть обычный файл, символическая ссылка, подмодуль, …) изменен (T),
Unmerged (U), Неизвестный (X) или спаривающийся (B)

(к которому добавляет Jean-Philippe Pellet:

Письма о статусе R а также C "За ними всегда следуют баллы, обозначающие процент сходства между источником и целью перемещения или копии, и только так и должно быть".)

Относительно файлов, скопированных или перемещенных:

-C[<n>]
--find-copies[=<n>]

Обнаруживать копии, а также переименовывает. Если n указано, имеет то же значение, что и для -M<n>,

--find-copies-harder

По причинам производительности по умолчанию -C Опция находит копии только в том случае, если исходный файл копии был изменен в том же наборе изменений.
Этот флаг заставляет команду проверять неизмененные файлы в качестве кандидатов на источник копирования.
Это очень дорогая операция для больших проектов, поэтому используйте ее с осторожностью. Давая больше чем один -C Опция имеет тот же эффект.


brauliobo рекомендует в комментариях:

git diff --stat -C
git show --stat -C
git log --stat -C

Я верю `` покажу эту информацию

git diff -M -C --stat
Другие вопросы по тегам