Chris's Wiki :: blog/tech/VCSVsMetadata Commentshttps://utcc.utoronto.ca/~cks/space/blog/tech/VCSVsMetadata?atomcommentsDWiki2018-11-16T20:51:49ZRecent comments in Chris's Wiki :: blog/tech/VCSVsMetadata.By Greg A. Woods on /blog/tech/VCSVsMetadatatag:CSpace:blog/tech/VCSVsMetadata:2d879a59abf832ab97c5ac63a3f738290e520267Greg A. Woods<div class="wikitext"><p>Indeed, "VCSes are not backup systems" (with perhaps the exceptions being one or two mostly unsuccessful experiments done decades ago).</p>
<p>I've been trying to say this for literally decades now. It was probably only a few days or weeks after I first encountered SCCS and RCS that I also encountered people trying in vain to use them as backup tools with versioning capability.</p>
<p>Those exceptions I mentioned were actually full filesystems which recorded the history of every change, or at least all specified changes. We do have some few modern filesystems that can do snapshots, but of course such a feature on its own isn't really sufficient for the filesystem to be called a VCS (even if you're willing and able to make each project directory a separate filesystem).</p>
<p>Most VCSs are, since the beginning and including all I know of in use today, designed to store source code (i.e. human and machine readable data, which mostly means text files), not arbitrary files, and especially not filesystem metadata. Indeed though modern VCSs are able to store binary data, it soon becomes apparent to anyone exploring them in depth that one rarely, if ever, wants to store product files of any kind in the VCS. Even when this is done for good reason it's usually done by proxy, e.g. "git annex".</p>
<p>So, the answer to trying to use a VCS to store filesystem metadata requires translating that metadata into some form of executable description of it, and then storing that description (e.g. a makefile or script or program which creates/changes filesystem metadata), and arranging to run this description after checking out a specific version of a project.</p>
</div>2018-11-16T20:51:49Z