Как программно объединить текстовые файлы с потенциальными конфликтами (ala git или svn и т. Д.)? - PullRequest
10 голосов
/ 01 ноября 2010

В рамках более крупного проекта я хочу иметь возможность взять два тела текста и передать их алгоритму слияния, который возвращает либо автоматически объединенный результат (в случаях, когда изменения не конфликтуют), либо выдает ошибку и (потенциально) создает один текстовый документ с выделенными конфликтующими изменениями.

По сути, я просто хочу программным способом сделать то, что делает каждая система управления источниками на планете, но мне трудно найти это. Существуют тонны визуальных графических интерфейсов для выполнения подобных задач, которые доминируют в моих результатах поиска, но ни один из них, по-видимому, не делает легкодоступным основной алгоритм объединения. Все полагаются на какой-то общий и хорошо понятный алгоритм / библиотека, и я просто не знаю названия, поэтому мне трудно его искать? Является ли это небольшим изменением в diff, и я должен искать библиотеки diff вместо библиотек слияния?

Библиотеки Python были бы наиболее полезны, но я могу смириться с накладными расходами по взаимодействию с какой-либо другой библиотекой (или решением командной строки), если потребуется; эта операция должна быть относительно редкой.

Ответы [ 2 ]

10 голосов
/ 01 ноября 2010

Вы, вероятно, ищете алгоритмы слияния, такие как трехстороннее слияние, которое вы можете найти во многих проектах с открытым исходным кодом, например, на базаре VCS ( источник merge3.py ).

1 голос
/ 01 ноября 2010

Вы проверили difflib

...