Git флаги статуса diff - PullRequest
       4

Git флаги статуса diff

0 голосов
/ 29 апреля 2020

Мне нужно полностью понять вывод git diff для создания "пакета" измененных файлов.
Я хочу запустить и проанализировать git diff old_commit..new_commit --name-status --diff-filter=ACDMRT (пропуская U и X)

Из документация:

Возможные буквы состояния:

A: добавление файла
C: копирование файла в новый
D: удаление файл
M: изменение содержимого или режима файла
R: переименование файла
T: изменение типа файла
U: файл не объединен (необходимо заполнить объединить до того, как оно будет зафиксировано)
X: «неизвестный» тип изменения (скорее всего, ошибка, сообщите об этом)

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

Я проверил несколько больших репозиториев и не нашли примеров «M», за которым »может последовать оценка« », и я не нашел ни одного« C »вообще.
Означает ли« С »также« R »(R100 path/from/old.file path/to/new.file)? Могу ли я сделать какой-либо локальный коммит, который покажет мне такой случай?

1 Ответ

1 голос
/ 29 апреля 2020

Некоторые буквы состояния и другие условия могут появляться только при выборе некоторых конкретных параметров.

Это относится к 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...