Это кросс-операционная совместимая утилита для диффузии с такими замечательными возможностями, как отображение разницы отдельных символов или директорий.
Версии diff для GNU и OpenBSD (macOS) имеют разные флаги и возможности.
Технически вы можете установить GNU-версию diff на macOS, но если у вас уже установлен git, вы можете использовать git diff, даже если вам нужно продифференцировать файлы, не отслеживаемые git!
Допустим, вы хотите сравнить 2 файла, не находящиеся в git, вы можете сделать следующее:
git diff --no-index -- file_a file_b
Вот и всё, флаг –no-index позволяет сравнить два пути и даёт git’у понять, что они не являются коммитом или ссылкой на git.
Дальше всё становится ещё проще.
Если пути существуют в каталоге, который не отслеживается git’ом, вы можете упростить команду до git diff file_a file_b.
Но зачем использовать git diff, если можно использовать diff?
Это зависит от ситуации.
В переносимых скриптах я буду использовать diff, но есть случаи, когда, если я знаю, что git установлен, и хочу сделать определённые вещи, я буду использовать git diff.
Вот пара примеров.
Полезные особенности git diff и diff
Помимо кросс-операционной совместимости, у git diff есть несколько полезных возможностей. Это далеко не все из них, но вот две, которые я использую время от времени.
Сравнение каталогов
Я добавил несколько примеров файлов в каталог:
/home/nick/src/tutorials/git-diff-tips
├── a
│ ├── 1
│ └── 2
└── b
├── 1
├── 2
└── 3
2 directories, 5 files
Затем я использовал разную заглавную букву в словах:
$ git diff ~/src/tutorials/git-diff/a ~/src/tutorials/git-diff/b
diff --git a/home/nick/src/tutorials/git-diff/a/1 b/home/nick/src/tutorials/git-diff/b/1
index 5626abf..3609f20 100644
--- a/home/nick/src/tutorials/git-diff/a/1
+++ b/home/nick/src/tutorials/git-diff/b/1
@@ -1 +1 @@
-one
+One
diff --git a/home/nick/src/tutorials/git-diff/a/2 b/home/nick/src/tutorials/git-diff/b/2
index f719efd..3b0086f 100644
--- a/home/nick/src/tutorials/git-diff/a/2
+++ b/home/nick/src/tutorials/git-diff/b/2
@@ -1 +1 @@
-two
+Two
diff --git a/home/nick/src/tutorials/git-diff/b/3 b/home/nick/src/tutorials/git-diff/b/3
new file mode 100644
index 0000000..b2cde18
--- /dev/null
+++ b/home/nick/src/tutorials/git-diff/b/3
@@ -0,0 +1 @@
+Three
Различия по символам
Иногда удобно видеть выделения для каждого добавленного или удаленного символа, вместо того чтобы видеть, как меняется вся строка из-за одного символа.
# --color-words can take in a regex, in this case we say all characters are treated as words.$ git diff --color-words=. file_a file_b
Вот результаты выполнения аналогичной команды в скрипте обновления.
Выделитель синтаксиса diff на сайте не показывает цветом различия между отдельными символами, поэтому вот снимок экрана.
Новый заголовок CSV и новые запятые окрашены в зеленый цвет.
см. также: