My (current) view of using branches in VCSes
In a comment on this entry, Aristotle Pagaltzis asked:
(Though I admit I wonder why you do have
fred-1
andfred-2
[source directories] rather than branches in your VCS.)
The simple answer is that my favorite way of changing branches is with
cd
. This is especially the case if I'm developing things in parallel
and may well wind up throwing one of them away; for good reasons VCSes
make totally deleting a branch much harder than a plain 'rm -rf
'.
I'll admit that part of my preference is because I haven't yet gotten
around to master branching in either git or Mercurial (partly because I
frankly don't entirely like it or need it yet).
(Some people will say that you should keep even experimental stuff that didn't work out in your VCS in case you ever want to go back to it later. This may work for them but it doesn't work for me; I want my VCS to be neater than that.)
But even without that I think cd
is much easier than going back and
forth between branches in the same directory hierarchy, especially
if you're developing on both branches. With today's VCSes, flipping
back and forth between branches generally wants you to have actually
committed your work to both of them and this itself leads to messy
history (or to a lot of redoing commits or the equivalent, as you commit
only so that you can flip branches, then annul and overwrite the commit
the next time). I also personally think that it is a cleaner and more
natural model for (multi-)branch development, with the only downside
being more disk space being used.
(And disk space is generally cheap unless you're dealing with huge repos. The two largest repos I have handy are Mozilla and the Linux kernel; Mozilla is 2 GB and Linux is 1.2 GB. That's not going to break the bank on modern machines.)
I understand why VCSes have branch-switching commands (they can't not have them, to put it one way) and the benefits of having multiple branches in the same repo (including things like being able to do easy diffs between branches). But it just doesn't fit into the way that I prefer to interact with VCSes and I like to keep my life simple.
|
|