2013-04-18 2 views
1

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

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

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

ответ

2

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

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

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

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

+0

Можно ли использовать 'git' реализацию' diff' вне контроля версий, чтобы найти diff двух произвольных файлов? – Septagram

+2

Huhn. оказывается, что вы можете (я сначала думал, что вы не могли). 'git diff - $ FILEA $ FILEB', похоже, работает даже вне git-repos - естественно, git должен быть установлен –

Смежные вопросы