Инструменты разработчика · Сравнение текста
Как читать унифицированные различия: заголовки фрагментов, строки контекста и маркеры +/-
· Фон
разница текста патчи рабочий процесс разработчика
Декодирует единый формат различий построчно, от заголовков файлов и диапазонов фрагментов @@ до строк контекста и маркеров изменений, поэтому исправления из любого инструмента имеют смысл.
Стена плюсов, минусов и символов @@ — открывается при первом знакомстве с патчем в электронном письме или запросе на включение.
Загруженный файл `changes.patch` начинается со знаков препинания, напоминающих знакомый вывод diff, но его точная структура имеет значение. ToolAcre записывает две метки, а затем каждую строку сравнения с односимвольным маркером. Чтение того, что существует, безопаснее, чем мысленное добавление полей из другого формата патча.
Откройте файл в текстовом редакторе. Первые две строки идентифицируют левую и правую метки, предоставленные пользовательским интерфейсом, как `original` и `changed`. Последующие строки реконструируют сравниваемые тексты посредством маркеров контекста, удаления и добавления.
Строки заголовка файла — объясняют строки --- и +++, пути и инструменты префиксов a/ и b/.
Заголовок — `--- original`, за которым следует `+++ changed`. В других инструментах эти префиксы могут находиться в более богатой грамматике исправлений, но этот экспортер не добавляет меток времени, путей или метаданных. Метки описывают стороны, а не файлы, существование которых на диске доказано.
Это различие имеет значение, поскольку Text diff принимает вставленные строки, а не файловые объекты. Загрузка создает локальный текстовый отчет после сравнения. Если рассматривать метки как пути к хранилищу или идентификаторы редакций, это будет означать происхождение, которое пользовательский интерфейс никогда не собирал.
Объяснение заголовков ханков — декодирует @@ -12,7 +12,8 @@ в качестве начальной строки и количества строк для каждой стороны.
В `toUnifiedText` нет строк, начинающихся с `@@`. Функция сопоставляется непосредственно со всеми строками после двух меток. Следовательно, этот вывод не имеет диапазонов фрагментов для декодирования и пар start-line/count, встроенных в загруженный текст.
Номера строк остаются доступными в отображаемом представлении браузера, где строки занимают левое и правое положение. Экспорт выбирает более простое представление. Если нижестоящей программе требуются унифицированные блоки, соответствующие стандартам, проверьте совместимость, а не предполагайте, что расширение `.patch` предоставляет отсутствующий синтаксис.
ToolAcre не генерирует заголовки фрагментов @@, поэтому их не нужно декодировать.
Пробел в начале обозначает неизмененную строку, минус отмечает удаление слева, а плюс отмечает добавление справа. Пользовательский интерфейс может визуально свернуть длинные равные прогоны, но `lastDiff` сохраняет полный результат, а загрузка сериализует все строки. Маркер пропуска не входит в строку патча.
В схеме по умолчанию упоминаются три контекстные строки. Три используется при вызове визуального свертывания, а не при экспорте. Объединение этих путей приведет к занижению загружаемого контента. Представление и сериализация используют общие строки, но применяют разные преобразования.
При загрузке отмечается каждая строка и не используется трехстрочный контекст по умолчанию.
Сравните левый текст `a b` с правым `a c`. Экспорт содержит две метки, затем строку с пробелом и `a`, строку с минусом и `b` и строку с плюсом и `c`. При чтении сверху вниз видно, что `a` сохраняется, `b` удаляется из исходной стороны, а `c` добавляется в изменённую.
Таким образом, модификация представляется как соседнее удаление и добавление, когда выравнивание объединяет их. Формат не называет его «модифицированным». Если повторяющиеся строки допускают другое выравнивание, последовательность может выглядеть иначе, но при этом учитывать каждую входную строку.
Рабочий пример: прочитать полный поток в форме патча, который фактически экспортирует ToolAcre.
Обычные, контекстные и полные унифицированные форматы различий имеют свои собственные спецификации и истории, но они не реализованы и не документированы в используемом здесь исходном наборе. В этой статье не утверждается, почему тот или иной формат стал популярным или поля списка ToolAcre не выдаются.
Используйте команду контроля версий, когда другой инструмент должен применить исправление. Загрузка ToolAcre полезна в качестве портативного артефакта проверки, однако репозиторий не содержит анализатора исправлений или функции применения, что доказывает, что он может проходить через произвольных потребителей исправлений.
Для полного сравнения унифицированных, контекстных и обычных форматов требуются внешние источники.
Бинарные патчи, заголовки переименования, изменения режима и приложения находятся за пределами этого маршрута. Текст не содержит идентификаторов объектов или общего предка. Он не может представлять операцию с хранилищем просто потому, что его маркеры выглядят знакомо.
Экспортер также отражает активные варианты сравнения. Строка, считающаяся равной после нормализации регистра или пробелов, содержит только исходный левый текст, поэтому документ в форме патча не является побайтовой реконструкцией обоих входных данных при свободном сопоставлении.
Вывод: разница — это сжатая история: она обобщает порядок чтения и отмечает, как сравнение текста ToolAcre показывает те же изменения, что и выделенные строки, для быстрого просмотра.
Сначала прочтите две метки, а затем интерпретируйте каждую строку с префиксом по порядку. Если вам нужны отображаемые номера строк, вернитесь в представление браузера. Если вам нужны полноценные блоки, сгенерируйте их с помощью инструмента, который документирует этот контракт.
ToolAcre предоставляет компактный способ вывести сравнение за пределы страницы, не заявляя о реализации каждой функции исправления. Это более узкое название — выходные данные в форме патча — обеспечивает соответствие ожиданий конкретной функции и позволяет избежать ложных обещаний совместимости приложений.