[RFC] ALFS version control system

Kevin P. Fleming kpfleming at linuxfromscratch.org
Wed Apr 14 13:23:35 PDT 2004


A discussion occurred on lfs-dev two months (or so) ago regarding 
version control systems, with the goal of switching the LFS project to 
SVN from CVS. During that discussion, I brought up the possibility of 
using BitKeeper, and while a number of people were open to the 
possibility, some also expressed reservations (or outright denial) at 
using a closed-source product.

However, as I think about it more, and become more used to BitKeeper 
myself, I find that it would be a very good fit for what the ALFS team 
needs. Note that I am _not_ referring to what the LFS/BLFS teams need; 
the ALFS team produces a different kind of products, and the users of 
our products use them in a different way. I don't want to fracture the 
community, and I don't even know if Gerard would be willing to let us 
install BitKeeper on belgarath, but I think the issues warrant serious 
discussion.

A big problem with both CVS and SVN is that when you "checkout" a module 
from the CVS repository, you get a checked-out copy, _not_ another 
repository. This means that you cannot then clone a copy of that tree 
and make changes and push them back to that tree, you can only send them 
back to the master tree. It is also very difficult to make multiple 
copies of a tree (for different changes you are working on) and merge 
them together in an automated fashion.

Let me give a simple example of where BitKeeper would be helpful in our 
maintenance tasks... I am currently working on at least three different 
areas in nALFS: logging, handler parsing/display, and various efficiency 
improvements. As it stands today, I can only do those changes in a 
single tree, or else the only way I can merge them together is to push 
them up to the master CVS tree, even if the changes are not ready for 
public consumption yet (this is why CVS HEAD is currently broken). 
However, with BitKeeper I can do this:

bk clone bk://bk.linuxfromscratch.org/ALFS/nALFS nALFS-logging
bk clone bk://bk.linuxfromscratch.org/ALFS/nALFS nALFS-handlers
bk clone bk://bk.linuxfromscratch.org/ALFS/nALFS nALFS-misc

This gives me three trees I can work in, any of which can push changes 
up to the master tree on belgarath, but more importantly, I can _clone_ 
these trees and push changes between them locally for testing before I 
send them up to the master tree. I can also pull changes from anyone 
else's clone of the nALFS tree (if, for example, Jamie has some changes 
he'd like me to play with) into any of my trees without them having to 
be diff/patched or merged into the master tree.

This is an immensely useful way to work, and I did it for a while, but 
it was too hard to merge the changes back into CVS (plus the revision 
history got lost), so I'm back to using CVS for now.

There are also benefits to using BitKeeper to maintain local copies of 
the LFS profiles, so that you can easily keep local changes and be able 
to pull down updates from the master tree as well. This is also possible 
with CVS, but with BitKeeper you could pull changes from someone else's 
copy of the profile as well and merge them into your tree with only one 
or two commands.

I very much want to be able to use BitKeeper for these things, but I'm 
hesitant to push very hard for it unless the ALFS community would find 
it valuable. If there is resistance to installing BitKeeper on 
belgarath, we could certainly set up an account on bkbits.net and use 
that as our master working area for ALFS products, but I don't really 
want to go that direction if we don't have to.




More information about the alfs-discuss mailing list