diff

diff сравнивает два текстовых файла в unified-формате, а входящая в тот же модуль команда patch применяет изменение только при совпадении контекста исходника. Сохранение патча и замена исходного файла выполняются только явно.

РазработкаВерсия 1.1.3СтабильнаяАлиасы: patch
lil-terminal

Обзор

Удобно воспринимать diff и patch как один цикл проверки: сначала увидеть изменение, при необходимости сохранить его, затем применить в отдельный файл и только после проверки решить, нужно ли заменять исходник.

Сначала проверить изменение, затем применить

Практичная последовательность: diff old.php new.php -o change.patch, затем patch old.php change.patch. По умолчанию patch создаёт отдельный файл .patched; только -r заменяет исходный файл.

Синтаксис

lil-terminal
diff <old> <new> [options]

Справочник

diff <old> <new>

показать unified diff с тремя строками контекста

diff <old> <new> -c <lines>

задать от 0 до 20 строк контекста

diff <old> <new> -q

сообщить только, различаются ли файлы

diff <old> <new> -o <patch>

сохранить diff в файл патча

patch <file> <patch>

применить патч в <file>.patched

patch <file> <patch> -o <dst>

записать результат в другой файл

patch <file> <patch> -r

атомарно заменить исходный файл

patch <file> <patch> -f

разрешить замену существующего выходного файла без -r

Проверка и применение

diff old.php new.php -o change.patch сохраняет проверенное изменение, не трогая оба исходных файла. patch old.php change.patch по умолчанию создаёт отдельный .patched; другой путь задаётся через -o <dst>. Для замены оригинала нужен -r.

Ограничения и безопасность

Каждый сравниваемый текстовый файл ограничен 4 МиБ и 20000 строками; бинарные данные не сравниваются. Diff размером более 4 МиБ не возвращается. При применении патча проверяется каждая строка контекста, поэтому патч от другой версии исходника завершается ошибкой до записи.

Интерактивный пример из `/sandbox/`

Запускайте подготовленные примеры прямо на странице. Результат заранее сформирован и показывается в браузере; команды терминала на сервере не выполняются.

Показать unified diff с тремя строками контекста

Установка и управление

Устанавливайте актуальную совместимую версию. Для полного набора возможностей выбирайте Base, для сокращённого — Minimum; уже установленный модуль обновляет команда upgrade.

Base и Minimum — два пакета одного текущего релиза модуля, а не разные версии команды.

Пакет Base

Установить полный пакет с локальной справкой и всеми опубликованными режимами.

install diff
Пакет Minimum

Установить сокращённый пакет без локальной справки; help <cmd> -i открывает актуальную серверную справку.

install diff -m
Точная публичная версия

Установить именно эту опубликованную версию.

install diff -v 1.1.3
Проверить или обновить

Поручить upgrade проверить совместимость и заменить установленный блок только при необходимости.

upgrade diff
Удалить модуль

Удалить блок расширения, не затрагивая ядро и остальные модули.

install diff -u

Примеры

Примеры можно копировать, но сайт их не выполняет. Перед запуском на реальном проекте проверьте пути, права и разрушающие флаги.

Показать unified diff с тремя строками контекста
cd \sandbox | diff workspace/original.txt workspace/updated.txt
--- workspace/original.txt
+++ workspace/updated.txt
@@ -1,2 +1,2 @@
-alpha
+alpha reviewed
Задать от 0 до 20 строк контекста
diff workspace/original.txt workspace/updated.txt -c 1
--- workspace/original.txt
+++ workspace/updated.txt
@@ -1,2 +1,2 @@
-alpha
+alpha reviewed
Сообщить только, различаются ли файлы
diff workspace/original.txt workspace/updated.txt -q
Different  yes
Old        workspace/original.txt
New        workspace/updated.txt
Сохранить diff в файл патча
diff workspace/original.txt workspace/updated.txt -o tmp/workspace.patch
Saved  tmp/workspace.patch
Size   148 B
Применить патч в <file>.patched
patch workspace/original.txt tmp/workspace.patch
Source   workspace/original.txt
Patched  workspace/original.txt.patched

patch поставляется модулем diff и применяет unified diff средствами PHP, не требуя системной утилиты patch.

Записать результат в другой файл
patch workspace/original.txt tmp/workspace.patch -o tmp/patched.txt
Source   workspace/original.txt
Patched  tmp/patched.txt

patch поставляется модулем diff и применяет unified diff средствами PHP, не требуя системной утилиты patch.

Разрешить замену существующего выходного файла без -r
patch workspace/original.txt tmp/workspace.patch -o tmp/current.txt -f
Source   workspace/original.txt
Patched  tmp/current.txt
Replace  explicit

patch поставляется модулем diff и применяет unified diff средствами PHP, не требуя системной утилиты patch.

Атомарно заменить исходный файл
patch workspace/original.txt tmp/workspace.patch -r
Source   workspace/original.txt
Patched  workspace/original.txt

patch поставляется модулем diff и применяет unified diff средствами PHP, не требуя системной утилиты patch.

Обработать отсутствующий файл для сравнения
diff missing.txt workspace/updated.txt
Файл не найден: missing.txt

Файл из примера: sandbox/workspace/original.txt

Пример использует файл или каталог из защищённой учебной папки /sandbox/.

alpha
beta
gamma

Связанная документация

Текущая публичная версия

v1.1.32026-08-08

Первая стабильная версия

Актуальная стабильная версия diff. diff сравнивает два текстовых файла в unified-формате, а входящая в тот же модуль команда patch применяет изменение только при совпадении контекста исходника.