Если у меня есть приложение PHP, которое позволяет пользователям вносить изменения в документы, как лучше всего реализовать отслеживание изменений для каждого документа? Я хочу, чтобы хранилище каждой ревизии было разделено (то есть сохраняло только внесенные изменения), как svn и другие SCM с кодом. Я знаю на очень простом уровне, как это работает, но когда я начинаю думать о его реализации, я немного запутываюсь.
Прежде всего, мне интересно, есть ли библиотека, которая может мне в этом помочь, так что мне не нужно полностью сворачивать свою собственную.
И мне интересно: следует ли мне сохранять полный текст только исходного документа, а затем сохранять только изменения, или мне следует сохранять полный текст последнего документа, и каждый раз, когда он изменяется, сохранять различия как одно из старые версии?
Если первое, то когда я хочу захватить страницу для отображения на сайте, нужно ли мне начинать с самого начала, а затем рекурсивно обновлять данные на основе исправлений, пока я не достигну текущей версии? Разве это не будет мучительно медленным, когда будет много исправлений?
Как я могу выполнять операции типа diff / patch в PHP, чтобы упростить удаление и реконструкцию страниц?
Стоит ли блокировать страницы, когда они их редактируют? Или позволить страницам войти в «состояния конфликта» и выполнить операции по разрешению конфликтов - позволить двум пользователям одновременно изменять одну и ту же страницу, если они изменяют разные части и т. Д. - Я схожу с ума, думая о том, насколько это будет сложно. Ах!