Трехстороннее слияние в JavaScript или PHP

Кто-нибудь знает о реализации трехстороннего слияния с открытым исходным кодом в JavaScript или PHP? Я хочу объединить простые текстовые файлы без необходимости полагаться на двоичные файлы на стороне сервера.

Я нашел несколько решений для создания различий, но без реализации слияния.

4 ответа

Решение

Не совсем трехстороннее слияние, но Google "Библиотеки Diff Match и Patch предлагают надежные алгоритмы для выполнения операций, необходимых для синхронизации простого текста". И реализация доступна в Java, JavaScript, C++, C#, Lua и Python.

Только что закончил свою работу над таким js- и php-инструментом. Посмотрите и наслаждайтесь:

https://github.com/Krassmus/Textmerger

Вам просто нужно написать

var merged = Textmerger.get().merge(original, mytext, theirtext);

или в PHP

$merged = Textmerger::get()->merge($original, $mytext, $theirtext);

и вы сделали.

Обнаружив, что пакеты npm 3-way-merge и Three-way-merge (основные из них, которые появляются в результатах поиска по запросу «three-way merge npm») не работают должным образом и не поддерживаются, я наткнулся на это гораздо больше, более полезный

https://www.npmjs.com/package/diff3

В итоге мы написали наше решение так:

      var diff3 = require('diff3');
var mergeData = diff3(sourceArray, originalArray, targetArray);

var result = mergeData.map(({ok, conflict}) => {
  if (ok) {
    return ok;
  }
  else if (conflict) {
    return [
      '<<<<<<< target',
      ...conflict.b,
      '>>>>>>> target',
      '<<<<<<< source',
      ...conflict.a,
      '>>>>>>> source'
    ];
  }
}).flat();
Другие вопросы по тегам