Это команда git-diff-index, которую можно запустить в провайдере бесплатного хостинга OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
git-diff-index - сравнивает дерево с рабочим деревом или индексом
СИНТАКСИС
мерзавец diff-индекс [-m] [--cached] [ ] [ ...]
ОПИСАНИЕ
Сравнивает содержимое и режим больших двоичных объектов, найденных в объекте дерева, с соответствующими
отслеживаемые файлы в рабочем дереве или с соответствующими путями в индексе. Когда
аргументы присутствуют, сравнивает только пути, соответствующие этим шаблонам. В противном случае все
отслеживаемые файлы сравниваются.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
-р, -у, --патч
Сгенерировать патч (см. Раздел о создании патчей).
-s, --no-патч
Подавить вывод diff. Полезно для таких команд, как git show, которые показывают патч от
по умолчанию или для отмены эффекта --patch.
-U , --unified =
Создавайте различия с помощью строки контекста вместо обычных трех. Подразумевает -p.
--сырой
Сгенерируйте разницу в необработанном формате. Это значение по умолчанию.
--patch-with-raw
Синоним -p --raw.
- минимальный
Потратьте дополнительное время на то, чтобы получить минимально возможную разницу.
--терпение
Сгенерируйте различие, используя алгоритм "терпения различий".
- гистограмма
Сгенерируйте разницу, используя алгоритм "гистограммы сравнения".
--diff-algorithm = {терпение | минимальная | гистограмма | myers}
Выберите алгоритм сравнения. Возможны следующие варианты:
по умолчанию, Майерс
Базовый жадный алгоритм сравнения. В настоящее время это значение по умолчанию.
минимальный
Потратьте дополнительное время на то, чтобы получить минимально возможную разницу.
терпение
При создании патчей используйте алгоритм "терпение различий".
Гистограмма
Этот алгоритм расширяет алгоритм терпения, чтобы «поддерживать редко встречающиеся общие
элементы ".
Например, если вы настроили для переменной diff.algorithm значение, отличное от значения по умолчанию, и
хотите использовать значение по умолчанию, тогда вам нужно использовать параметр --diff-algorithm = default.
--stat [= [, [, ]]]
Создайте diffstat. По умолчанию для
часть имени файла, а остальное - часть графа. По умолчанию максимальная ширина соответствует терминалу
ширина или 80 столбцов, если они не подключены к терминалу, и могут быть переопределены .
Ширину части имени файла можно ограничить, задав другую ширину
после запятой. Ширина графической части может быть ограничена с помощью
--stat-ширина-графика = (влияет на все команды, формирующие график статистики) или
установка diff.statGraphWidth = (не влияет на git format-patch). Давая
третий параметр , вы можете ограничить вывод первым линии, за которыми следуют
по ... если есть еще.
Эти параметры также можно установить индивидуально с помощью --stat-width = ,
--stat-имя-ширина = и --stat-count = .
--numstat
Аналогично --stat, но показывает количество добавленных и удаленных строк в десятичной системе счисления и
имя пути без сокращений, чтобы сделать его более удобным для машины. Для двоичных файлов
выводит два - вместо того, чтобы сказать 0 0.
--shortstat
Вывести только последнюю строку формата --stat, содержащую общее количество измененных
файлов, а также количество добавленных и удаленных строк.
--dirstat [= ]
Выведите распределение относительного количества изменений для каждого подкаталога. В
поведение --dirstat можно настроить, передав ему список разделенных запятыми
параметры. Значения по умолчанию контролируются конфигурационной переменной diff.dirstat.
(См. git-конфигурация(1)). Доступны следующие параметры:
изменения
Вычислите числа dirstat, посчитав строки, которые были удалены из
источник или добавлен в место назначения. Это игнорирует количество чистого кода
движения внутри файла. Другими словами, перестановка строк в файле не
посчитал столько же, сколько и другие изменения. Это поведение по умолчанию, когда нет параметра
дано.
линий
Вычислите числа dirstat, выполнив обычный линейный анализ различий, и
суммирование количества удаленных / добавленных строк. (Для двоичных файлов подсчитывайте 64-байтовые фрагменты.
вместо этого, поскольку двоичные файлы не имеют естественного представления о строках). Это более
дорого --dirstat behavior, чем изменение поведения, но это учитывается
переставил строки в файле так же, как и другие изменения. В результате получается
в соответствии с тем, что вы получаете от других - * параметров статистики.
файлов
Вычислите числа dirstat, посчитав количество измененных файлов. Каждый изменился
файл одинаково учитывается при анализе dirstat. Это самый дешевый с точки зрения вычислений
--dirstat, так как ему вообще не нужно просматривать содержимое файла.
кумулятивный
Подсчитайте изменения в дочернем каталоге и для родительского каталога. Обратите внимание, что
при использовании кумулятивного значения сумма указанных процентов может превышать 100%. В
поведение по умолчанию (не кумулятивное) может быть указано с помощью некумулятивного
Параметр.
Целочисленный параметр указывает процент отсечения (по умолчанию 3%). Справочники
вносящие меньший, чем этот процент изменений, не отображаются в выходных данных.
Пример: следующее будет подсчитывать измененные файлы, игнорируя каталоги с меньшим
более 10% от общего количества измененных файлов, а количество дочерних каталогов накапливается.
в родительских каталогах: --dirstat = files, 10, кумулятивно.
--резюме
Вывести сжатую сводку расширенной информации заголовка, такой как создание, переименование
и изменения режима.
--patch-with-stat
Синоним -p --stat.
-z
Если задано --raw, --numstat, --name-only или --name-status, не изменяйте
имена путей и использовать NUL в качестве ограничителей выходных полей.
Без этой опции каждый выходной путь будет иметь TAB, LF, двойные кавычки и
символы обратной косой черты заменены на \ t, \ n, \ "и \\ соответственно, а имя пути
будут заключены в двойные кавычки, если произошла какая-либо из этих замен.
- имя-только
Показывать только имена измененных файлов.
--имя-статус
Показывать только имена и статус измененных файлов. См. Описание --diff-filter
вариант того, что означают статусные буквы.
- подмодуль [= ]
Укажите, как отображаются различия в подмодулях. Когда --submodule или --submodule = log
дано журнал формат используется. В этом формате перечислены коммиты в диапазоне вроде мерзавец
подмодуль(1) резюме. Пропуск опции --submodule или указание
--submodule = short, использует короткие формат. Этот формат просто показывает имена
фиксируется в начале и в конце диапазона. Можно настроить с помощью подмодуля diff.submodule
переменная конфигурация.
--color [= ]
Показать цветной diff. --color (т.е. без знак равно) совпадает с --color = always.
может быть всегда, никогда или авто.
- бесцветный
Отключить цветной дифференциал. Это то же самое, что и --color = never.
--word-diff [= ]
Покажите слово diff, используя для разграничения измененных слов. По умолчанию слова
разделены пробелами; см. --word-diff-regex ниже. В по умолчанию простой,
и должен быть одним из:
цвет
Выделите измененные слова, используя только цвета. Подразумевает --color.
простой
Показывать слова как [-removed-] и {+ added +}. Не предпринимает попыток избежать
разделители, если они присутствуют во входных данных, поэтому выходные данные могут быть неоднозначными.
фарфор
Используйте специальный построчный формат, предназначенный для использования скриптом.
Добавленные / удаленные / неизмененные прогоны печатаются в обычном унифицированном формате сравнения,
начиная с символа + / - / `` в начале строки и продолжая до
конец строки. Новые строки во вводе представлены тильдой ~ в строке
своих собственных.
нет
Снова отключите слово diff.
Обратите внимание, что, несмотря на название первого режима, цвет используется для выделения измененного
детали во всех режимах, если они включены.
--word-diff-regex =
Использовать чтобы решить, что такое слово, вместо того, чтобы рассматривать пробелы без пробелов, чтобы
быть словом. Также подразумевает --word-diff, если он еще не был включен.
Каждый неперекрывающийся матч считается словом. Что-нибудь между
эти совпадения считаются пробелами и игнорируются (!) в целях поиска
различия. Вы можете добавить | [^ [: space:]] к своему регулярному выражению, чтобы сделать
убедитесь, что он соответствует всем непробельным символам. Соответствие, содержащее новую строку,
молча обрезается (!) на новой строке.
Например, --word-diff-regex =. будет рассматривать каждый символ как слово и,
соответственно, отображать различия по характеру.
Регулярное выражение также можно установить с помощью драйвера diff или параметра конфигурации, см.
gitattributes(1) или git-конфигурация(1). Предоставление этого явно отменяет любой драйвер diff или
настройка конфигурации. Драйверы различий переопределяют параметры конфигурации.
--color-words [= ]
Эквивалентно --word-diff = color plus (если было указано регулярное выражение)
--word-diff-regex = .
--no-переименовывает
Отключите обнаружение переименования, даже если в файле конфигурации указано значение по умолчанию.
так.
--проверить
Предупреждать, если изменения приводят к ошибкам, связанным с пробелами. Ошибки, связанные с пробелами, считаются
контролируется конфигурацией core.whitespace. По умолчанию завершающие пробелы
(включая строки, состоящие исключительно из пробелов) и пробел,
сразу после символа табуляции внутри начального отступа строки
считается ошибкой пробелов. Выход с ненулевым статусом при обнаружении проблем. Нет
совместим с --exit-code.
--ws-error-highlight =
Выделите ошибки пробелов в строках, указанных в цвете, указанном
color.diff.whitespace. представляет собой список старого, нового контекста, разделенного запятыми. Когда
эта опция не указана, выделяются только ошибки пробелов в новых строках. Например
--ws-error-highlight = new, old выделяет ошибки пробелов как при удалении, так и при добавлении
линий. all может использоваться как сокращение для старого, нового контекста.
--полный индекс
Вместо первой горстки символов покажите полные капли до и после изображения.
имена объектов в строке "index" при генерации вывода в формате патча.
- двоичный
В дополнение к --full-index вывести двоичную разницу, которую можно применить с помощью git-apply.
--abbrev [= ]
Вместо отображения полного 40-байтового шестнадцатеричного имени объекта в выводе в формате diff-raw
и строки заголовка diff-tree показывают только частичный префикс. Это не зависит от
Опция --full-index выше, которая управляет выходным форматом diff-patch. Не по умолчанию
количество цифр можно указать с помощью --abbrev = .
-B [ ] [/ ], --break-rewrites [= [ ] [/ ]]
Разбейте полные изменения перезаписи на пары удаления и создания. Это служит двум
цели:
Это влияет на то, как изменение, которое сводится к полной перезаписи файла, а не как серия
удаления и вставки, смешанные вместе с очень несколькими строками, которые совпадают
текстуально как контекст, но как единственное удаление всего старого, за которым следует
однократная вставка всего нового, и число m управляет этим аспектом -B
вариант (по умолчанию 60%). -B / 70% указывает, что менее 30% оригинала должно
остаются в результате, чтобы Git считал его полностью переписанным (т. е. в противном случае
результирующий патч будет серией удалений и вставок, смешанных с контекстом
линии).
При использовании с -M полностью перезаписанный файл также считается источником
переименовать (обычно -M рассматривает только исчезнувший файл как источник переименования),
а число n управляет этим аспектом опции -B (по умолчанию 50%). -B20%
указывает, что изменение с добавлением и удалением по сравнению с 20% или более
размер файла может быть выбран как возможный источник переименования в
другой файл.
-M [ ], --find-renames [= ]
Обнаружение переименований. Если указано n, это порог индекса сходства (т. Е.
количество добавлений / удалений по сравнению с размером файла). Например, -M90% означает
Git должен рассматривать пару удаления / добавления как переименование, если более 90% файла
не изменилось. Без знака% число следует читать как дробь, с
десятичная точка перед ним. То есть -M5 становится 0.5 и, таким образом, совпадает с -M50%.
Точно так же -M05 совпадает с -M5%. Чтобы ограничить обнаружение точным переименованием, используйте -M100%.
Индекс подобия по умолчанию - 50%.
-C [ ], --find-copy [= ]
Обнаруживать копии, а также переименовывать. См. Также --find-copy-harder. Если указано n, оно
имеет то же значение, что и -M .
- найти-копии-сложнее
Из соображений производительности по умолчанию опция -C находит копии только в том случае, если исходный файл
копии были изменены в том же наборе изменений. Этот флаг заставляет команду проверять
немодифицированные файлы в качестве кандидатов в источник копии. Это очень дорого
для больших проектов, поэтому используйте его с осторожностью. Предоставление более одной опции -C
имеет тот же эффект.
-D, --необратимо-удалить
Пропускайте прообраз для удалений, то есть печатайте только заголовок, но не разницу между
preimage и / dev / null. Полученный патч не предназначен для применения с патчем или
git apply; это исключительно для людей, которые хотят просто сосредоточиться на просмотре
текст после изменения. Кроме того, в выходных данных явно не хватает информации, чтобы
применить такой патч в обратном порядке, даже вручную, отсюда и название опции.
При использовании вместе с -B опускать также прообраз в части удаления
удалить / создать пару.
-l
Опции -M и -C требуют времени обработки O (n ^ 2), где n - количество
потенциальные цели переименования / копирования. Эта опция предотвращает запуск обнаружения переименования / копирования
если количество целей переименования / копирования превышает указанное число.
--diff-filter = [(A | C | D | M | R | T | U | X | B) ... [*]]
Выберите только файлы, которые добавлены (A), скопированы (C), удалены (D), изменены (M), переименованы
(R), изменили их тип (например, обычный файл, символическая ссылка, подмодуль, ...) (T), являются
Не объединенные (U), Неизвестные (X) или их пара Сломана (B). Любая комбинация
из символов фильтра (в том числе ни одного) можно использовать. Когда добавлено * (Все или ничего)
к комбинации, все пути выбираются, если есть какой-либо файл, который соответствует другому
критерии сравнения; если нет файла, соответствующего другим критериям, ничего
.
-S
Ищите различия, которые изменяют количество вхождений указанной строки
(т.е. добавление / удаление) в файле. Предназначен для использования сценаристом.
Это полезно, когда вы ищете точный блок кода (например, структуру) и хотите
чтобы узнать историю этого блока с момента его появления: используйте функцию
итеративно передать интересный блок в прообразе обратно в -S и продолжить
пока не получите самую первую версию блока.
-ГРАММ
Ищите отличия, текст патча которых содержит добавленные / удаленные строки, соответствующие .
Чтобы проиллюстрировать разницу между -S --pickaxe-regex и -G , рассмотреть возможность
фиксация со следующей разницей в том же файле:
+ return! regexec (regexp, two-> ptr, 1, ®match, 0);
...
- hit =! regexec (regexp, mf2.ptr, 1, ®match, 0);
В то время как git log -G "regexec \ (regexp" покажет эту фиксацию, git log -S "regexec \ (regexp"
--pickaxe-regex не будет (потому что количество вхождений этой строки не
изменение).
Смотрите пост в киркомотыга вход в gitdiffcore(7) для получения дополнительной информации.
--pickaxe-все
Когда -S или -G находят изменение, показывать все изменения в этом наборе, а не только
файлы, содержащие изменение в .
--кирка-regex
Лечить передается -S как расширенное регулярное выражение POSIX для сопоставления.
-O
Выведите патч в порядке, указанном в , который имеет одну оболочку
узор в строке. Это отменяет конфигурационную переменную diff.orderFile (см. мерзавец
конфиг(1)). Чтобы отменить diff.orderFile, используйте -O / dev / null.
-R
Поменять местами два входа; то есть показать различия от индекса или файла на диске к дереву
содержание.
--relative [= ]
При запуске из подкаталога проекта можно указать исключить изменения вне
каталог и отображать пути относительно него с помощью этой опции. Когда тебя нет
подкаталог (например, в пустом репозитории), вы можете назвать подкаталог, который нужно сделать
выход относительно, задавая как аргумент.
-текст
Считайте все файлы текстовыми.
--ignore-space-at-eol
Игнорировать изменения пробелов в EOL.
-b, --игнорировать-пробел-изменение
Игнорировать изменения количества пробелов. Это игнорирует пробелы в конце строки и
считает все остальные последовательности одного или нескольких пробельных символов эквивалентными.
-w, --игнорировать все пробелы
Игнорируйте пробелы при сравнении строк. Это игнорирует различия, даже если в одной строке
пробел там, где его нет в другой строке.
--игнорировать пустые строки
Игнорировать изменения, все строки которых пусты.
--inter-hunk-context =
Показать контекст между блоками различий до указанного количества строк, тем самым
сплавление кусков, находящихся близко друг к другу.
-W, --функция-контекст
Показать все окружающие функции изменений.
--exit-код
Выполните выход из программы с кодами, похожими на Разница(1). То есть он выходит с 1, если есть
были различия, а 0 означает отсутствие различий.
--тихий
Отключите весь вывод программы. Подразумевается --exit-code.
--ext-diff
Разрешить выполнение внешнего помощника diff. Если вы установите внешний драйвер diff с
gitattributes(5), вам нужно использовать эту опцию с git-журнал(1) и друзья.
--no-ext-diff
Запретить внешние драйверы различий.
--текстконв, --но-текстконв
Разрешить (или запретить) запуск внешних фильтров преобразования текста при сравнении двоичных файлов
файлы. Видеть gitattributes(5) для подробностей. Поскольку фильтры textconv обычно
одностороннее преобразование, результирующая разница подходит для потребления человеком, но не может
применяться. По этой причине фильтры textconv по умолчанию включены только для мерзавец
Разница(1) и git-журнал(1), но не для git-формат-патч(1) или команды сантехники различий.
--ignore-submodules [= ]
Игнорировать изменения субмодулей при генерации различий. может быть либо «нет»,
"неотслеживаемый", "грязный" или "все" - значение по умолчанию. Использование "none" будет учитывать
подмодуль изменен, если он содержит неотслеживаемые или измененные файлы или его HEAD
отличается от фиксации, записанной в суперпроекте, и может использоваться для отмены любого
настройки игнорировать вариант в git-конфигурация(1) или gitmodules(5). Когда "неотслеживаемый"
используемые подмодули не считаются грязными, если они содержат только неотслеживаемый контент (но
они все еще сканируются на предмет измененного содержимого). Использование "dirty" игнорирует все изменения в
дерево работы подмодулей, сохраняются только изменения коммитов, хранящихся в суперпроекте.
показано (так было до версии 1.7.0). Использование "все" скрывает все изменения в
подмодули.
--src-prefix =
Показывать данный исходный префикс вместо "a /".
--dst-prefix =
Показывать префикс получателя вместо "b /".
- без префикса
Не показывать префиксы источника или назначения.
Для более подробного объяснения этих распространенных опций см. Также gitdiffcore(7).
Идентификатор древовидного объекта для сравнения.
--кешированный
вообще не рассматривать файл на диске
-m
По умолчанию файлы, записанные в индекс, но не извлеченные, помечаются как удаленные.
Этот флаг делает мерзавец diff-индекс говорят, что все файлы, которые не были извлечены, обновлены.
RAW ВЫВОД ФОРМАТ
Необработанный выходной формат из "git-diff-index", "git-diff-tree", "git-diff-files" и "git
diff --raw "очень похожи.
Все эти команды сравнивают два набора вещей; что сравнивается отличается:
git-diff-index
сравнивает и файлы в файловой системе.
git-diff-index --cached
сравнивает и индекс.
git-diff-tree [-r] [ ...]
сравнивает деревья, названные двумя аргументами.
git-diff-files [ ...]
сравнивает индекс и файлы в файловой системе.
Команда "git-diff-tree" начинает вывод с вывода хэша того, что
в сравнении. После этого все команды выводят по одной строке вывода для каждого измененного файла.
Строка вывода форматируется следующим образом:
редактирование на месте: 100644 100644 bcd1234 ... 0123456 ... M file0
копировать-редактировать: 100644 100644 abcd123 ... 1234567 ... C68 файл1 файл2
переименовать-редактировать: 100644 100644 abcd123 ... 1234567 ... R86 файл1 файл3
создать: 000000 100644 0000000 ... 1234567 ... Файл4
удалить: 100644 000000 1234567 ... 0000000 ... D файл5
без объединения: 000000 000000 0000000 ... 0000000 ... U файл6
То есть слева направо:
1. толстая кишка.
2. режим для "src"; 000000, если создано или не объединено.
3. пробел.
4. режим "dst"; 000000 при удалении или без объединения.
5. пробел.
6. sha1 для "src"; 0 {40}, если создано или не объединено.
7. пробел.
8. sha1 для "dst"; 0 {40} в случае создания, без объединения или «посмотрите на дерево работ».
9. пробел.
10. статус, за которым следует необязательный номер «оценки».
11. табуляция или NUL, когда -z опция используется.
12. путь для "src"
13. табуляция или NUL, когда -z опция используется; существует только для C или R.
14. путь для "dst"; существует только для C или R.
15. LF или NUL, когда -z опция используется для прекращения записи.
Возможные статусные буквы:
· A: добавление файла
· C: копирование файла в новый
· D: удаление файла
· M: изменение содержимого или режима файла
· R: переименование файла
· T: изменение типа файла
· U: файл не объединен (вы должны завершить объединение, прежде чем его можно будет зафиксировать)
· X: "неизвестный" тип изменения (скорее всего, ошибка, сообщите об этом)
За статусными буквами C и R всегда следует оценка (обозначающая процентное соотношение
сходство между источником и целью перемещения или копии). Статусная буква M может быть
за которым следует оценка (обозначающая процент несходства) для перезаписи файлов.
отображается как все 1, если файл в файловой системе новый и не синхронизирован с
индекс.
Пример:
: 100644 100644 5be4a4 ...... 000000 ...... M file.c
Если опция -z не используется, в именах путей отображаются символы TAB, LF и обратная косая черта.
как \ t, \ n и \\ соответственно.
DIFF ФОРМАТ Для СЛИЯНИЯ
"git-diff-tree", "git-diff-files" и "git-diff --raw" могут принимать -c or --cc вариант
генерировать вывод diff также для коммитов слияния. Вывод отличается от описанного формата
выше следующим образом:
1. Для каждого родителя стоит двоеточие
2. есть еще режимы "src" и "src" sha1
3. статус - это конкатенированные символы статуса для каждого родителя.
4. нет необязательного «балльного» числа
5. одиночный путь, только для "dst"
Пример:
:: 100644 100644 100644 fabadb8 ... cc95eb0 ... 4866510 ... MM описать.c
Обратите внимание, что сочетании Разница перечисляет только файлы, которые были изменены всеми родителями.
ПОЛУЧЕНИЕ ПАТЧИ -P
Когда "git-diff-index", "git-diff-tree" или "git-diff-files" запускаются с -p вариант, "мерзавец
diff "без --сырой параметр или "git log" с параметром "-p", они не создают
вывод, описанный выше; вместо этого они создают файл исправления. Вы можете настроить создание
таких патчей через переменные среды GIT_EXTERNAL_DIFF и GIT_DIFF_OPTS.
Опция -p немного отличается от традиционного формата diff:
1. Ему предшествует заголовок "git diff", который выглядит следующим образом:
diff --git a / file1 b / file2
Имена файлов a / и b / одинаковы, если не используется переименование / копирование. Особенно даже
для создания или удаления / dev / null является используется вместо a / или b /
имена файлов.
Когда используется переименование / копирование, file1 и file2 показывают имя исходного файла
переименовать / скопировать и имя файла, который производит переименование / копирование, соответственно.
2. За ним следует одна или несколько расширенных строк заголовка:
старый режим
новый режим
режим удаленного файла
новый файловый режим
копировать из
скопировать в
переименовать из
переименовать в
индекс сходства
индекс несходства
показатель ..
Режимы файлов печатаются в виде шестизначных восьмеричных чисел, включая тип файла и файл.
биты разрешения.
Имена путей в расширенных заголовках не включают префиксы a / и b /.
Индекс сходства - это процент неизмененных линий, а индекс несходства
процент измененных строк. Это округленное целое число, за которым следует
знак процента. Таким образом, значение индекса сходства 100% зарезервировано для двух одинаковых файлов,
в то время как 100% несходство означает, что ни одна строка из старого файла не попала в новый
вариант.
Строка индекса включает контрольную сумму SHA-1 до и после изменения. В является
включается, если режим файла не меняется; в противном случае отдельные строки указывают на старый
и новый режим.
3. TAB, LF, двойные кавычки и обратная косая черта в именах путей представлены как \ t, \ n,
\ "и \\ соответственно. Если есть необходимость в такой замене, то весь
путь заключен в двойные кавычки.
4. Все файлы file1 в выводе относятся к файлам до фиксации, а все файлы file2
файлы относятся к файлам после фиксации. Неверно применять каждое изменение к каждому
файл последовательно. Например, этот патч поменяет местами a и b:
diff --git a / ab / b
переименовать из
переименовать в b
diff --git a / bb / a
переименовать из b
переименовать в
КОМБИНИРОВАННЫЙ DIFF ФОРМАТ
Любая команда генерации различий может принимать параметр -c или --cc для создания сочетании Разница когда
показывает слияние. Это формат по умолчанию при отображении слияний с git-diff(1) или мерзавец
произошел(1). Также обратите внимание, что вы можете указать опцию -m любой из этих команд, чтобы
генерация различий с отдельными родителями слияния.
A сочетании Разница формат выглядит так:
diff --combined описать.c
индекс fabadb8, cc95eb0..4866510
--- a / describe.c
+++ b / describe.c
@@@ -98,20 -98,12 +98,20 @@@
return (a_date> b_date)? -1: (a_date == b_date)? 0: 1;
}
- статическое описание void (char * arg)
-static void description (struct commit * cmit, int last_one)
++ статическое описание void (char * arg, int last_one)
{
+ беззнаковый символ sha1 [20];
+ struct commit * cmit;
struct commit_list * список;
статический int инициализирован = 0;
struct commit_name * n;
+ если (get_sha1 (arg, sha1) <0)
+ использование (describe_usage);
+ cmit = lookup_commit_reference (sha1);
+ если (! cmit)
+ использование (describe_usage);
+
if (! initialized) {
инициализировано = 1;
for_each_ref (get_name);
1. Ему предшествует заголовок "git diff", который выглядит следующим образом (когда -c опция
используемый):
diff --комбинированный файл
или как это (когда --cc вариант):
diff --cc файл
2. За ним следует одна или несколько расширенных строк заголовка (в этом примере показано слияние с
двое родителей):
показатель , ..
Режим , ..
новый файловый режим
режим удаленного файла ,
Режим , .. строка появляется только в том случае, если хотя бы один из является
отличается от остальных. Расширенные заголовки с информацией об обнаруженном содержимом
движение (переименование и обнаружение копирования) предназначены для работы с разницей двух
и не используются в комбинированном формате сравнения.
3. За ним следует двухстрочный заголовок из файла / в файл.
--- файл
+++ б / файл
Подобен двухстрочному заголовку для традиционного унифицированный формат diff, / dev / null используется для
сигнализировать о созданных или удаленных файлах.
4. Формат заголовка блока изменен, чтобы люди случайно не загрузили его в
патч -p1. Комбинированный формат сравнения был создан для просмотра изменений фиксации слияния и
не предназначен для подачи заявки. Изменение аналогично изменению в расширенном индекс
заголовок:
@@@ @@@
В заголовке блока для комбинированного сравнения есть (количество родителей + 1) символов @
формат.
В отличие от традиционных унифицированный diff, который показывает два файла A и B с одним
столбец, имеющий - (минус - появляется в A, но удален в B), + (плюс - отсутствует в A, но
добавлен к B) или префиксу "" (пробел - без изменений), этот формат сравнивает два или более файла
file1, file2, ... с одним файлом X и показывает, чем X отличается от каждого из fileN. Один столбец
для каждого из fileN добавляется к строке вывода, чтобы отметить, чем строка X отличается от
его.
Знак A в столбце N означает, что строка присутствует в файле N, но не отображается
в результате. Знак + в столбце N означает, что строка появляется в результате,
и fileN не имеет этой строки (другими словами, строка была добавлена с точки
мнение этого родителя).
В выходных данных приведенного выше примера подпись функции была изменена из обоих файлов (следовательно, два
- удаления как из файла1, так и из файла2, плюс ++ означает, что одна строка, которая была добавлена, не
появляются либо в файле1, либо в файле2). Также восемь других строк совпадают с файлом file1, но делают
не отображается в файле2 (следовательно, с префиксом +).
При отображении с помощью git diff-tree -c он сравнивает родителей коммита слияния со слиянием.
результат (т.е. file1..fileN - это родители). При отображении с помощью git diff-files -c он сравнивает
два неразрешенных родителя слияния с файлом рабочего дерева (т.е. file1 - это этап 2, также известный как
«наша версия», file2 - это этап 3, также известный как «их версия»).
ДРУГИЕ DIFF ФОРМАТЫ
Параметр --summary описывает недавно добавленные, удаленные, переименованные и скопированные файлы. --Stat
опция добавляет дифференциал(1) график вывода. Эти варианты можно комбинировать с другими
параметры, такие как -p, и предназначены для употребления человеком.
При отображении изменения, связанного с переименованием или копированием, вывод --stat форматирует
путевые имена компактно, комбинируя общий префикс и суффикс путевых имен. Например,
изменение, которое перемещает arch / i386 / Makefile в arch / x86 / Makefile при изменении 4 строк, будет
показано так:
arch / {i386 => x86} / Makefile | 4 + -
Параметр --numstat дает дифференциал(1) информация, но предназначена для более легкой машины
потребление. Запись в выводе --numstat выглядит так:
1 2 README
3 1 арка / {i386 => x86} / Makefile
То есть слева направо:
1. количество добавленных строк;
2. вкладка;
3. количество удаленных строк;
4. вкладка;
5. путь (возможно, с информацией о переименовании / копировании);
6. перевод строки.
Когда действует опция вывода -z, вывод форматируется следующим образом:
1 2 README НУЛЕВОЕ
3 1 NUL arch / i386 / Makefile NUL arch / x86 / Makefile NUL
То есть:
1. количество добавленных строк;
2. вкладка;
3. количество удаленных строк;
4. вкладка;
5. NUL (существует только при переименовании / копировании);
6. Путь в прообразе;
7. NUL (существует только при переименовании / копировании);
8. путь в postimage (существует только при переименовании / копировании);
9. NUL.
Дополнительный NUL перед путем к прообразу в переименованном случае позволяет скриптам, которые читают
вывод, чтобы узнать, является ли текущая считываемая запись однопутной записью или переименованием / копией
запись без предварительного чтения. После прочтения добавленных и удаленных строк, чтение до NUL
даст имя пути, но если это NUL, запись покажет два пути.
РАБОЧЕЕ РЕЖИМЫ
Вы можете выбрать, хотите ли вы полностью доверять индексному файлу (используя --кешированный флаг)
или попросите логику сравнения показать все файлы, которые не соответствуют состоянию статистики, как
"предварительно изменено". Обе эти операции действительно очень полезны.
ЗАПИСАНО РЕЖИМ
If --кешированный указано, это позволяет вам спросить:
покажите мне различия между HEAD и текущим индексом
содержимое (те, которые я бы написал с помощью 'git write-tree')
Например, предположим, что вы работали над своим рабочим каталогом, обновили некоторые файлы.
в индексе и готовы к фиксации. Вы хотите точно увидеть почему ты собираешься
совершить, без необходимости писать новый объект дерева и сравнивать его таким образом, и для этого,
ты просто делаешь
git diff-index --cached HEAD
Пример: допустим, я переименовал commit.c в git-commit.c, и я сделал update-index
чтобы сделать это эффективным в индексном файле. git diff-files вообще ничего не покажет,
поскольку индексный файл соответствует моему рабочему каталогу. Но делая мерзавец diff-индекс делает:
torvalds @ ppc970:~ / git> git diff-index --cached HEAD
-100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 commit.c
+100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 git-commit.c
Вы легко видите, что это переименование.
Фактически, git diff-index --cached должен всегда быть полностью эквивалентным фактическому выполнению
мерзавец дерево записи и сравнивая это. За исключением того, что этот намного лучше для случая, когда вы
просто хочу проверить, где ты.
Таким образом, использование git diff-index --cached в основном очень полезно, когда вы спрашиваете себя
"что я уже отметил как совершенный и в чем разница с предыдущим
дерево ".
НЕ КЕШЕНЫ РЕЖИМ
Режим «без кеширования» использует другой подход и потенциально является более полезным из
два в том, что он делает, не может быть эмулирован с помощью мерзавец дерево записи + мерзавец дерево различий, таким образом
это режим по умолчанию. Некешированная версия задает вопрос:
покажите мне различия между HEAD и текущим проверенным
tree - индексировать содержимое _и_ файлы, которые не обновлены
что, очевидно, тоже очень полезный вопрос, поскольку он говорит вам, что вы могли бы совершить.
Опять же, результат соответствует мерзавец дерево различий -r выход в тройник, но с закруткой.
Дело в том, что если какой-то файл не соответствует индексу, у нас нет резервного хранилища.
вещь для этого, и мы используем волшебный "все-ноль" sha1, чтобы показать это. Итак, скажем, что вы
отредактировали kernel / sched.c, но на самом деле не сделали мерзавец индекс обновления на нем еще -
нет никакого «объекта», связанного с новым состоянием, и вы получаете:
torvalds @ ppc970:~ / v2.6 / Linux> git diff-index --abbrev HEAD
: 100644 100664 7476bb ... 000000 ... ядро / sched.c
т.е. он показывает, что дерево изменилось, и что файл kernel / sched.c не обновлен.
и может содержать что-то новое. Полностью нулевой sha1 означает, что для получения реальной разницы вам необходимо
смотреть на объект в рабочем каталоге напрямую, а не выполнять преобразование объекта в объект
разн.
Внимание
Как и в случае с другими командами этого типа, мерзавец diff-индекс на самом деле не смотрит на
содержимое файла вообще. Так что, возможно, kernel / sched.c на самом деле не изменился, и это
просто то, что вы прикоснулись к нему. В любом случае это примечание, что вам нужно мерзавец
индекс обновления это для синхронизации индекса.
Внимание
У вас может быть несколько файлов, которые будут отображаться как "был обновлен" и "все еще грязный" в
рабочий каталог "вместе. Вы всегда можете определить, в каком состоянии находится файл,
так как «был обновлен» показывает действительный sha1, а «не синхронизируется с
index "всегда будут иметь специальный sha1 со всеми нулями.
GIT
Часть мерзавец(1) люкс
Используйте git-diff-index онлайн с помощью сервисов onworks.net