Какие аргументы использует git diff для команды diff?

Когда вы вызываете git diff, он использует diff Утилита для сравнения файлов, однако, не по умолчанию. Он использует несколько дополнительных опций, некоторые из которых я могу назвать:

  • Различные маркеры перед строками: +/- вместо>/<.
  • Несколько строк контекста до и после фактически разных строк.

Но я не уверен, что это единственные изменения. Какие другие и какие аргументы командной строки делает git перейти к diff добиться выхода по умолчанию? И если бы я хотел сравнить, скажем, a.txt с b.txt и сделать файл сравнения таким же, как это делает git, какую командную строку мне использовать?

1 ответ

Решение

Git не использует стандартный *nix или GNU diff, но реализует собственный алгоритм сравнения.

Код для этого находится в основном в файлах builtin/diff.c, builtin/diff-tree.c, builtin/diff-index.c а также builtin/diff-files.c в дереве исходников Git.

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

Стандартные (основанные на строках) исправления формата unified-diff, которые он может создать, совместимы с большинством других реализаций формата. IIRC, GNU diff (или это был патч?) Также добавили немного больше терпимости к некоторым дополнениям, которые Git добавляет в diff, чтобы быть более устойчивыми при применении патчей, генерируемых git.

Другие вопросы по тегам