Как я могу объединить две версии файла в PHP или JavaScript? - PullRequest
0 голосов
/ 14 октября 2010

Я пытаюсь кодировать сайт, который позволит нескольким людям одновременно работать с файлом. При этом самым большим препятствием, с которым я столкнулся, является объединение новых версий файлов в стиле контроля версий.

Мне не удалось найти ничего в духе встроенной функции JavaScript или PHP, которая помогла бы мне в этом. Самым близким, что я нашел, является array_diff, который на самом деле не то, что мне нужно, поскольку он просто возвращает элементы, которых нет в другом массиве, и если у меня есть массив слов, обязательно должны быть повторы; кроме того, array_diff игнорирует количество раз, когда что-то появляется или его положение в файле.

Я немного посмотрел на алгоритм расстояния Левенштейна, который встроен как функция с php, но я не уверен, что это то, что мне нужно. Если это так, пожалуйста, скажите мне, и я рассмотрю это дальше.

Есть ли что-нибудь, что вы знаете о том, что удовлетворит мои потребности?

EDIT:

Позвольте мне немного уточнить. Я на самом деле не проектирую систему контроля версий. Я только хочу объединить файлы, а не хранить старые версии и т. Д. Является ли установка CVS или SVN или что-то в этом духе лучшим выбором для использования одной функции?

Ответы [ 4 ]

2 голосов
/ 14 октября 2010

Основной алгоритм - LCS .

Который используется для создания параллельного представления в таких программах, как WinMerge .

Я действительно сделал веб-версию, но застрял при синхронизации прокруткидва окна, и они пошли с более грубым решением.

1 голос
/ 14 октября 2010

См. EtherPad

1 голос
/ 14 октября 2010

Mercurial, Subversion, CVS, ... Не изобретайте велосипед действительно.

1 голос
/ 14 октября 2010

Зачем изобретать велосипед? Я бы использовал exec вместе с "diff", чтобы найти различия между двумя файлами и начать работать оттуда.

Тем не менее, это не решит проблемы, которые не могут решить cvs: если возникают конфликты (потому что два или более человек меняли одну и ту же строку кода), вам придется исправить эти конфликты вручную (или позволить это делают редакторы).

Но опять же: почему бы не использовать CVS прямо сейчас и использовать вместе с ним веб-просмотрщик?
например http://www.viewvc.org

...