Podría hacer una commit log tipo de formato, más o menos como lo hace wikipedia.
Utilice una base de datos y cada cambio guardado crea una nueva fila en la base de datos que hace que el registro anterior sea redundante, con un valor incrementado, entonces solo tiene que preocuparse de obtener bloqueos de tabla durante la fase de guardado.
De esta forma, al menos si dos personas concurrentes editan algo, ambos cambios aparecerán en el historial y cualquiera que se haya perdido en la guerra de compromiso se puede copiar a la nueva revisión.
Ahora, si no quiere usar una base de datos, entonces tiene que preocuparse por tener un archivo de control de revisión que respalde cada archivo visible.
Se puede poner un control de revisión (GIT/mercurial/SVN) en el sistema de archivos y luego automatizar compromete durante la fase de guardar,
pseudocódigo:
user->save :
getWritelock();
write($file);
write_commitmessage($commitmessagefile); # <-- author , comment, etc
call "hg commit -l $commitmessagefile $file " ;
releaseWriteLock();
done.
Al menos de esta manera cuando 2 personas hacer commits críticos al mismo tiempo, ninguno se perderá.