Введение

Редактирование документов, программного кода или любых данных всегда сопряжено с риском внесения ошибок. Инструменты сравнения файлов, отображая различия между двумя или более наборами данных, могут упростить и повысить эффективность работы, позволяя сосредоточиться на новых данных и игнорируя неизменные фрагменты. Обычно называемые "diff" по аналогии с утилитой Unix diff, существуют различные способы сравнения источников данных и представления результатов. К широко используемым программам для сравнения файлов относятся diff, cmp, FileMerge, WinMerge, Beyond Compare и File Compare. Поскольку понимание изменений важно для разработчиков кода и авторов документов, многие текстовые редакторы и текстовые процессоры включают функциональность, необходимую для просмотра изменений между разными версиями файла или документа.

Типы методов

Наиболее эффективный метод поиска различий зависит от исходных данных и характера изменений. Один из подходов заключается в поиске самой длинной общей подпоследовательности между двумя файлами, после чего все данные, не входящие в эту подпоследовательность, рассматриваются как вставки или удаления. В 1978 году Пол Хеккель опубликовал алгоритм, который определяет большинство перемещенных блоков текста. Он используется в инструменте IBM History Flow. Другие программы сравнения файлов обнаруживают перемещения блоков. Некоторые специализированные инструменты сравнения файлов находят самую длинную возрастающую подпоследовательность между двумя файлами. Протокол rsync использует скользящую хеш-функцию для сравнения двух файлов на удаленных компьютерах с минимальными затратами на связь. Сравнение файлов в текстовых процессорах обычно выполняется на уровне слов, а в большинстве инструментов программирования – на уровне строк. Сравнение на уровне байтов или символов полезно в некоторых специализированных приложениях.

Показать

Оптимальный способ отображения результатов сравнения файлов зависит от множества факторов, включая тип исходных данных. Четкой единицей сравнения служат фиксированные строки программного кода. Это неприменимо к документам, где добавление даже одного слова может привести к переформатированию последующих строк, при этом содержание останется неизменным. Наиболее распространенные способы отображения изменений – это параллельное сравнение или консолидированный вид, выделяющий вставки и удаления. В режиме параллельного сравнения, а также при сворачивании кода или текста, для повышения эффективности интерфейс может скрывать неизмененные участки файла и отображать только различия.

Разумные рассуждения

Существует множество причин для использования инструментов сравнения, и сами инструменты применяют различные подходы. Для сравнения бинарных файлов инструмент может использовать сравнение на уровне байтов. При сравнении текстовых файлов или компьютерных программ многие инструменты используют визуальное сравнение "бок о бок". Это даёт пользователю возможность выбрать, какие изменения принять, а какие отклонить перед объединением файлов в новую версию. Или, возможно, сохранить оба файла без изменений для последующего использования с помощью какой-либо системы контроля версий. Сравнение файлов – важный и неотъемлемый процесс синхронизации и резервного копирования. В методологиях резервного копирования особенно важна проблема повреждения данных. Предупреждение о повреждении данных появляется редко, что может затруднить или сделать невозможным восстановление. Зачастую проблема становится очевидной только при следующей попытке открыть файл. В такой ситуации инструмент сравнения может помочь выявить момент возникновения проблемы.

Историческое использование

До сравнения файлов существовали машины для сравнения магнитных лент или перфокарт. IBM 519 Card Reproducer мог определять, идентичны ли колоды перфокарт. В 1957 году Джон Ван Гарднер разработал систему для сравнения контрольных сумм загруженных секций программ на Фортране с целью отладки проблем компиляции на IBM 704.