Вам понадобится версия datastore и .
Храните версии своих ресурсов, предоставляя каждому ресурсу номер ревизии. Когда пользователь редактирует ресурс вместо замены ресурса, сохраните редактирование как новую запись в вашем хранилище данных с новым более высоким номером ревизии. Когда вы хотите получить ресурс, верните тот, у которого самая высокая версия.
Вместо номера редакции вы можете использовать временные метки. Не только временные метки всегда увеличиваются, но сам номер ревизии можно использовать для определения того, когда ресурс был изменен.
Выберите алгоритм diff, основанный на том, как вы храните ресурсы. Викитекст обычно используется в linuxise, поэтому, если пользователи редактируют это, было бы разумно использовать linewise diff, как стандартная утилита Unix diff
. Если ресурсы являются XML, вы можете захотеть найти XML-специфический алгоритм дифференциации, чтобы пользователям было ясно, где эти различия.
Почему вы не можете использовать какой-либо из уже существующих вики-движков для своего инструмента сотрудничества? – lothar
Сложность нашего инструмента идет немного дальше. Вопрос в том, являются ли эти двигатели хорошими? Я не хочу создавать миллионную вики. – Kriem
О да, есть * много * хороших движков вики. Не изобретайте велосипед. Если вы это сделаете, вы можете захотеть взглянуть на просмотр в SO, это похоже на то, что вы описываете. – Zifre