Текстовый Diff/ Построчно

Построчное выделение различий между двумя текстами. Поддержка кода и обычного текста с настраиваемым количеством контекстных строк. Полностью локально.

ОригиналA
ИзмененоB
Контекст
Diff

Вставьте текст в обе панели выше.

Этот инструмент решил вашу проблему?

Что такое инструмент текстового diff

Инструмент текстового diff использует алгоритм LCS (наибольшая общая подпоследовательность) для построчного сравнения двух текстов, выявляя добавления, удаления и изменения.

Распространённые сценарии использования diff

Ревью кода: сравнение изменений кода. Управление конфигурацией: сравнение конфигураций между средами. Совместная работа с документами: просмотр истории правок. Миграция данных: проверка точности преобразования данных.

Примеры кода

JavaScript (jsdiff)
import { diffLines } from 'diff';

const a = 'foo\nbar\nbaz';
const b = 'foo\nqux\nbaz';

diffLines(a, b).forEach(part => {
  const sign = part.added ? '+' :
               part.removed ? '-' : ' ';
  process.stdout.write(sign + part.value);
});
Python
import difflib

a = ['foo\n', 'bar\n', 'baz\n']
b = ['foo\n', 'qux\n', 'baz\n']

# Unified diff (like git diff)
diff = difflib.unified_diff(
    a, b,
    fromfile='original',
    tofile='modified',
    n=3,  # context lines
)
print(''.join(diff))
Go
// github.com/sergi/go-diff
import (
  dmp "github.com/sergi/go-diff/
       diffmatchpatch"
)

d := dmp.New()
diffs := d.DiffMain(textA, textB, false)
patch := d.PatchMake(textA, diffs)
fmt.Println(d.PatchToText(patch))
Shell / CLI
# Unified diff with 3 context lines
diff -U 3 original.txt modified.txt

# Git-style diff (no git repo needed)
git diff --no-index \
  original.txt modified.txt

# Side-by-side view
diff --side-by-side \
  original.txt modified.txt

Часто задаваемые вопросы

Как работает алгоритм diff?
Инструмент использует алгоритм LCS (наибольшая общая подпоследовательность) для построчного сравнения текстов, находя минимальный набор добавлений и удалений — аналогично алгоритму git diff.
Для чего нужны контекстные строки?
Контекстные строки определяют, сколько неизменённых строк показывать вокруг каждого изменённого участка. 0 — только изменённые строки; 3 — по 3 строки до и после каждого изменения; 'Все' — полный текст.
Какие типы текста поддерживаются?
Поддерживается любой обычный текст, включая код (JavaScript, Python, Go и т.д.), файлы конфигурации (JSON, YAML, TOML), документы Markdown и файлы журналов.
Отправляется ли мой контент на сервер?
Нет. Вся обработка происходит полностью в браузере. Ваш контент не покидает устройство, что безопасно для сравнения конфиденциального кода.
Как скопировать результат diff?
Нажмите кнопку 'Копировать' в правом верхнем углу панели diff, чтобы скопировать унифицированный текст diff в буфер обмена.
Что делает кнопка Поменять?
Поменять A↔B меняет панели местами, позволяя просматривать diff в обратном направлении.