![Связано ли `git diff` с `diff`?](https://rvso.com/image/109224/%D0%A1%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BE%20%D0%BB%D0%B8%20%60git%20diff%60%20%D1%81%20%60diff%60%3F.png)
Относится git diff
к diff
?
Реализовано
git diff
на основеdiff
?Являетсясинтаксис командной строки
git diff
похожий начто изdiff
? Помогает ли изучение одного из них в использовании другого?имеют ли их выходные файлы одинаковый формат? Могут ли они использоваться
git patch
иpatch
? (Есть лиgit patch
? Как это связано сpatch
?)
Спасибо.
решение1
Формат файла совместим. Git использует лучший формат, diff -u
. Он также расширяет его для представления дополнительных типов изменений.
Эквивалент patch
— git apply
. Он выполняет этапы изменений в индексе, а также применяет их к рабочему дереву.
Я помню, git apply
что был строже, чем patch
, хотя справочная документация, похоже, не делает явного сравнения. Она упоминает несколько тестов / ошибок, которые можно включить или отключить.
В справочной документации также предполагается, что его можно использовать как «замену GNU patch» — даже за пределами репозитория git, если использовать определенную опцию.
решение2
git-diff предлагает больше возможностей, чем diff, и я не думаю, что выходные патчи будут совместимы (без некоторых дополнительных опций), поскольку diff будет выдавать строки вроде
diff -ruNa dir1/file1.txt dir2/file1.txt
в то время как git-diff выдает строки вроде
diff --git a/dir1/file1.txt b/dir2/file1.txt
(обратите внимание на префикс источника и назначения, переключаемый с помощью --no-prefix
, и различные параметры)
Вот некоторые дополнительные возможности git-diff:
Может записывать перемещенные/переименованные файлы, при этомразница не может
Использует рекурсивный режим, унифицированные различия и обрабатывает новые/удаленные файлы по умолчанию (
diff -ruN
)Поддерживает различные алгоритмы поиска различий
Поддерживает бинарные патчи git, которые кодируют двоичные данные в формате ASCII.