Некоторые буквы состояния и другие условия могут появляться только при выборе некоторых конкретных параметров.
Это относится к C
и R
: C
указывает на копию, и обнаружение копирования включается -C
или --find-copies
или явно отключается --no-find-copies
. Обнаружение переименования включено с -M
или --find-renames
(но включено по умолчанию в Git версии 2.9 и более поздних версиях).
Опция -B
(разрыв пары) приведет к тому, что будет показываться как M
в D
-и- A
, если это нарушит спаривание. Если временно прерванное соединение сопряжено повторно, значение M
получит оценку, поэтому, например, M80
потребует использования опции -B
.
Обратите внимание, что git diff
использует Конфигурация пользователя по умолчанию: diff.renames
будет влиять на то, будут ли отображаться R
и значения или нет, по умолчанию «not» в Git до 2.9 и «yes» в Git 2.9 или более поздних.
Я хочу запустить и проанализировать git diff old_commit..new_commit --name-status --diff-filter=ACDMRT
(пропуская U и X)
Статус U
отображается только во время конфликтующего слияния. При использовании git diff
с двумя указанными коммитами, как в приведенном здесь примере, это не может произойти. Статус X
, как говорится в документации, указывает на ошибку в git diff
и, следовательно, также не может возникнуть.
Вероятно, разумнее использовать git diff-tree
непосредственно здесь. Это не не подчиняется настройкам конфигурации какого-либо отдельного пользователя, поэтому вы контролируете, действует ли -M
. Вы можете выбрать, поставлять ли опции -B
и / или -C
. Если вы не предоставите ни одного из них, единственными возможными буквенными кодами будут A
, D
, M
и T
. Если вы добавите параметры разбиения на пары, поиска-копирования и поиска-переименования, вы, конечно, можете получить соответствующие другие - и да, формат C
соответствует формату R
.
You также получите имя-и-статус (и без патча) по умолчанию, так что вывод гораздо больше подходит для вашей задачи. Но вам, возможно, нужна опция -r
.