Вы можете сделать что-то вроде формата журнала коммитов, как в Википедии.
Используйте базу данных, и каждое сохраненное изменение создает новую строку в базе данных, что делает предыдущую запись избыточной с инкрементным значением, тогда вам нужно только беспокоиться о получении блокировок таблицы на этапе сохранения.
Таким образом, по крайней мере, если 2 одновременно работающих пользователя что-то отредактируют, оба изменения появятся в истории, и все, что было проиграно в войне, может быть скопировано в новую ревизию.
Теперь, если вы не хотите использовать базу данных, вам нужно беспокоиться о том, чтобы файл контроля версий поддерживал каждый видимый файл.
Вы можете поместить контроль версий (GIT / MERCURIAL / SVN) в файловую систему, а затем автоматизировать фиксацию во время фазы сохранения,
Псевдокод:
user->save :
getWritelock();
write( $file );
write_commitmessage( $commitmessagefile ); # <-- author , comment, etc
call "hg commit -l $commitmessagefile $file " ;
releaseWriteLock();
done.
По крайней мере, так, когда 2 человека делают критические коммиты одновременно, ни один из них не потеряется.