Инструменты разработчика · Сравнение текста
Двустороннее различие против трехстороннего слияния: почему сравнение — это не то же самое, что слияние
· Фон
разница текста конфликты слияния контроль версий
Объясняет разницу между сравнением двух версий и объединением двух версий, имеющих общего предка, а также почему существуют маркеры конфликта.
Два человека отредактировали один и тот же файл: что дальше? - открывается пределами сравнения двух версий, когда обе стороны изменились
Когда два человека редактируют один файл, сравнение их окончательных состояний показывает разницу, но не происхождение. Двустороннему дифференциалу не хватает общей базы, необходимой для определения того, какая сторона изменила конкретную исходную строку. Он может поддержать расследование, но не может принять решение о слиянии.
ToolAcre принимает ровно две строки: «Исходная» и «Измененная». Обмен меняет перспективу; это не добавляет истории. Любой рабочий процесс, которому нужна база, наша и их, должен обеспечивать эти состояния посредством отдельных сравнений или использовать настоящий механизм трехстороннего слияния.
Двусторонняя разница отвечает на один вопрос — еще раз подтверждает, что сравнение показывает, что отличается, а не какая сторона должна победить.
Двустороннее сравнение показывает, какие упорядоченные строки различаются в зависимости от выбранного регистра и пробелов. Строки равны, удалены или добавлены. Ничто в этом результате не говорит о том, что одна сторона новее, авторитетнее или правильнее, и ни одна операция не выбирает победителя.
Это ограничение имеет значение, когда обе стороны редактируют один и тот же регион. Строка, присутствующая только слева, может быть ценным новым изменением, а не устаревшим удалением. Без базовых данных метки направлений описывают перспективу сравнения, а не хронологию развития.
Общий предок меняет все — объясняет, как базовая версия позволяет инструменту слияния отличать изменения одной стороны от изменений другой.
Общий предок позволяет системе слияния сравнивать основания слева и справа. Если только один потомок меняет регион, это изменение может четко сочетаться; если оба вносят несовместимые изменения, система может выявить конфликт, который должен разрешить человек.
ToolAcre не имеет третьего входа и алгоритма слияния. Вы можете вставить базу и одну ветку, записать строки, а затем повторить то же самое для другой ветки. Этот ручной анализ помогает понять, но не воссоздает все правила размещения и конфликтов контроля версий.
Декодирование маркеров конфликта — поясняет разделы <<<<<<<, ======= и >>>>>>> и то, что происходит между ними.
Маркеры конфликтов, такие как блоки угловых скобок, представляют собой вставленный сюда буквальный текст. Text diff может сравнить помеченный файл с предложенным разрешением, но не анализирует разделы как наши, базовые или их. Он не будет удалять маркеры или выбирать контент.
Разрешите конфликты в авторитетном репозитории, где имена файлов, происхождение и тесты остаются доступными. Используйте инструмент браузера только для небольшой проверки формулировок, когда материал подходит для вставки. Визуально чистый результат не является доказательством того, что объединенная программа работает правильно.
Проработанный пример: слияние с одним чистым ханком и одним конфликтом — проход по базе, две правки и результирующий вывод
Начните с базовых линий `color=blue` и `limit=10`. Одна ветка меняет цвет; еще один лимит изменений. Сравнение оснований с ветвями выявляет независимые строки, и при слиянии вполне возможно сохранить обе. Если оба изменяют один и тот же предел по-разному, текстовый конфликт требует политического решения.
Двустороннее сравнение между двумя ветвями показывает, что обе строки различаются, но не может вывести общее начальное значение. Именно этот недостающий факт и является причиной того, что сравнение не является слиянием. Добавьте к рассуждениям основу, а затем протестируйте выбранное комбинированное состояние в реальной системе.
Там, где все еще помогает двустороннее сравнение — описывает сравнение каждой стороны с базовым или проверку объединенного результата на соответствие ожиданиям.
Двусторонняя разница остается полезной после разрешения конфликта. Сравните объединенный отрывок с каждой веткой, чтобы убедиться, что предполагаемые вклады сохранились, или с ожидаемым рукописным состоянием. Не отключайте нормализацию, если пробелы или регистр могут повлиять на язык.
Загруженный поток в форме патча может записывать каждую проверку, но не может применять или проверять слияние. Исходные номера строк являются локальными для каждого вставленного состояния и могут отличаться от позиций в репозитории после соседних изменений.
Что здесь не распространяется — при сравнении текста ToolAcre сравниваются два текста; он не выполняет слияния, и в этом посте не рассматриваются стратегии перебазирования.
ToolAcre не выполняет слияния, перемещения, атрибуцию конфликтов и анализ истории коммитов. У него нет метки перемещенного блока и нет семантического понимания. Это явное следствие наличия двухвходового линейного компаратора, а не отсутствия кнопок, спрятанных где-то еще.
В статье также не предписывается стратегия ветвления. Команды должны следить за своим контролем репозитория, владением кодом и контрольными точками тестирования. Сравнение браузеров — это вспомогательная поверхность проверки, а не альтернативная система контроля версий.
Вывод: различать для понимания, объединять для принятия решения — обобщает различия и показывает, как сравнение браузеров помогает разрешить конфликт вручную.
Diff, чтобы понять текст; объединиться, чтобы определить объединенное состояние. Первый можно повторить попарно с ToolAcre, а второй требует происхождения, политики и проверки. Разделение этих глаголов не позволяет ошибочно принять четкое отображение строк за безопасную интеграцию.
После разрешения конфликта запустите проверку синтаксиса, тесты и проверку предметной области в реальном проекте. Текстовое соглашение необходимо для многих слияний, но никогда не является достаточным для поведения. Роль браузера заканчивается, как только он делает видимыми соответствующие различия в строках.