Rich Kulawiec on 17 Nov 2017 09:18:53 -0800 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: [PLUG] Revision Control for the Rest of Us |
On Thu, Nov 16, 2017 at 10:47:29PM -0500, Rich Freeman wrote: > One big difference between RCS and git (and probably several of the > other modern VCSs) is that RCS is purely file-based (as is CVS, which > is for the most part a layer on top of RCS). If you make changes to > 15 files and commit the changes, with RCS you get 15 files that each > have a commit recorded in them. They might have the same timestamp > and author, but otherwise there is nothing that really links them. This is a feature and a bug. The feature is that this means you can take an RCS delta file (like foo.sh,v), pick it up, drop it somewhere, and then proceed as if it had always been there. The bug is that -- as you point out -- there's no "glue" between the files. If you modified foo.c and bar.c, depositing revision 1.3 of foo.c and 1.5 of bar.c, and subsequently you separate those files, nothing in either will lead to the other. Combined with branching (as you discussed elsewhere, and yes, RCS and CVS are pretty similiar in that regard) this means if building release 1.0 of the foobar executable requires v1.3 of foo.c and v1.5 of bar.c, then that scrap of information will have to be recorded somewhere else. Makefiles are a good place for that, but a better approach is to make all release builds dependent on the last version of the default branch of each file, so that most of this happens automagically, without requiring Makefile edits Every. Single. Time. As an aside/adjunct to this discussion, I'm a big fan of using plaintext files for everything possible and not a fan of the gratuitous use of databases. We now have systems that are ridiculously fast (for tasks like revision control) and many of them use SSD storage that alleviates some/much of the gap between memory and disk performance. In the abstract, there exists no set of computing operations which can be performed by DBs that can't be performed by plaintext files: it's simply a matter efficiency, and the gap in efficiency has been going down quickly. Why do I mention this? Because plaintext files are what I want to have when things break, because they give me a fighting chance of fixing the problem with vi and Python and grep and Perl and all the other myriad tools that work with them. When it's 3 AM and everything is wonky and it needs to not be wonky by 9 AM, I'd much rather be staring at text, even horrible text, than trying to unravel DB structures. To relate this digression back to the discussion, I think that revision control systems should eschew databases in favor of plaintext files at every possible opportunity. Whatever performance is surrendered by that today will be regained in the not-too-distant future. ---rsk ___________________________________________________________________________ Philadelphia Linux Users Group -- http://www.phillylinux.org Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug