Относительно того, как они работают, мне было интересно работать на низком уровне:
- Что вызовет конфликт слиянием?
- Является ли контекст также использованными инструментами для применения патча?
- Как они влияют на изменения, которые на самом деле не изменяют поведение исходного кода? Например, места определения функции обмена.
Что касается безопасности, правда, скажем, огромное хранилище ядро Linux является свидетельством их безопасности. Но я задаюсь вопросом о следующих моментах:
- Есть ли какие-либо оговорки/ограничения в отношении инструментов, о которых должен знать пользователь?
- Было ли доказано, что алгоритмы не порождают неправильных результатов?
- Если нет, существуют ли реализации/документы, предлагающие интеграционное тестирование, которые, по крайней мере, доказывают, что они ошибочно ошибочны? Что-то вроде содержания этих статей BrianKorver и JamesCoplien.
- Опять же, репозиторий Linux должен быть достаточно относительно предыдущего пункта, но мне было интересно, что-то более общее. Исходный код, даже если он изменен, сильно не изменится (особенно из-за реализованного алгоритма и ограничений синтаксиса), но может ли безопасность быть обобщена на общие текстовые файлы?
Изменить
Хорошо, я редактирую, так как вопрос нечеткий, и ответы не касаются деталей.
Git/diff/patch детали
Унифицированный формат diff, который по умолчанию использует Git, в основном выводит три вещи: изменение, контекст, связанный с изменением, и номера строк, относящихся к контексту. Каждая из этих вещей может быть или не быть изменена одновременно, поэтому Git в основном имеет дело с 8 возможными случаями.
Например, если строки были добавлены или удалены до контекста, номера строк будут разными; но если контекст и изменения все те же, то diff может использовать сам контекст для выравнивания текстов и применения патча (я не знаю, действительно ли это происходит). Теперь, что будет с другими случаями? Я хотел бы узнать подробности о том, как Git решает применить изменения автоматически и когда он решит выпустить ошибку и разрешить пользователю разрешить конфликт.
Надежность
Я почти уверен, что Git полностью надежный, так как у него есть полная история коммитов и может проходить история. Я бы хотел, чтобы некоторые указатели на академические исследования и ссылки на это, если они существуют.
До сих пор, связанный с этой темой, мы знаем, что Git/diff обрабатывает файлы как общие текстовые файлы и работает в строках. Кроме того, алгоритм LCS, используемый diff, будет генерировать патч, пытающийся свести к минимуму количество изменений.
Итак, вот некоторые вещи, которые я хотел бы также знать:
- Почему LCS используется вместо других строковых алгоритмов?
- Если используется LCS, почему бы не использовать модифицированные версии метрики, которые учитывают грамматические аспекты базового языка?
- Если такая метрика, которая учитывает грамматические аспекты, используется, может ли они обеспечить преимущества? Преимуществами в этом случае могут быть все, например, более чистый журнал ошибок.
Опять же, это могут быть огромные темы, и академические статьи приветствуются.