I'm about to embark on a large project which basically consists of maintaining a branch of the CentOS distribution. A consulting client modifies a few rpm's, includes a few of their own, and ships this thing on appliances. We want to be able to keep track of exactly what went into each machine and be able to reproduce if necessary.
I am going to be version controlling all of the SRPM's minus the pristine source tarballs which never change. They currently do something like this with FC2 and CVS but their old process is a bit of a mess and CVS is CVS. They want to move to a better version control system and are looking to me for guidance. There are only two we are considering having ruled the rest out: Mercurial (Hg) and Subversion (svn). I have a fair amount of experience with svn. It is much easier to use than cvs and I actually like the simple heirarchical nature of the repository and how tags are implemented with copies/references. It makes everything clear and easy to navigate. I also like the way svn supports webdav and auto-versioning and has a nice interface via trac. But I don't like that the merge handling isn't as slick due to not carrying enough meta-data around to know about the full history and where the common parent is. Historically I haven't done that much merging anyway but this place might be different. I also don't like that it isn't distributed and commits require communicating with the main repository. I've never used Hg before. But supposedly it is also easy to use, has easier merging, and is distributed. I don't so much like the fact that it doesn't seem to implement something as simple as keywords (So I can't put $Version:$ in the /etc/motd and know what the version of this distro is), doesn't do webdav, and you can only check out a whole repository. Not just an individual file or directory. The latter point has interesting implications for my preference to version control system files. Would I need to create a separate Hg repo for each host or each directory on each host or something equally silly? With svn I have a /hosts/hostname/etc/ for example and I can do: # cd /etc/ # svn mkdir host://svn.mydomain.com/hosts/hostname/etc # svn co host://svn.mydomain.com/hosts/hostname/etc/ . # svn add sudoers # svn commit And now my sudoers file is version controlled. I'm not sure how I will do this with Hg. One might suggest I use svn for host configs and Hg for larger coding projects which are more likely to be distributed anyway but using and administering two different tools for almost the same thing bugs me. I'm still doing research on these issues and I'll let you know what I decide. -- Tracy Reed http://www.ultraviolet.org -- KPLUG-List@kernel-panic.org http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-list