title: Two-step-commit VCS
body: <p>I'm implementing an application that need to keep track of the data changes, so we're going to version the entities.
  One of the requirements is that when the user starts an edit, a "local" copy is created which the user will be editing. This copy actually has to be stored on the server (so not really local) so that if the user pauses the work she can retrieve it later, even from a different machine.</p>
  
  <p>When happy with the changes she <strong>saves</strong> and the changes become visible to everyone. A new version number is assigned to the edited entity and to the entities referencing it (they need now to refer to the latest version).</p>
  
  <p>A further step is to <strong>publish</strong> the data. In this case the version is frozen: no more edits allowed. Any other change would be against a new version of the data set.</p>
  
  <p>I initially thought of using a VCS (e.g. Git) but the "2-step" commit complicates things a bit (not that they were that easy before). Also, I don't know of any VCS that stores the "work-in-progress".</p>
  
  <p>Is there any tool, framework or library that implements this or something similar?</p>