|Perl Monk, Perl Meditation|
I've been using CVS for a long time now. But I've only been using the basic features. No branching, tagging, etc. So now I'm trying to take my use of CVS to the next level. Which for me is starting to use branches. I have a copy of Carl Fogel's book and have found it very useful. (BTW, there is now a second edition and the entire book is now available for free. But I'd encourage supporting the author by buying a copy.) What I would like from my fellow monks is hints, tips, and strategy on more fully utilizing the features of CVS.
There is also a new CVS book from O'Reilly coming out soon. Anyone had a chance to review the manuscript? I suspect it won't be in-depth enough for what I want since it's an "Essentials" book. But I digress...
The IT group at my employer is very small, so the developers are almost never working on the same project. An essential element of any new strategy is that we can continue to work independently. We have also begun a project to start tagging releases, which will make updating the production servers much less risky. As part of this project, we're also putting together real smoke tests and just more testing in general.
Right now we're doing all development on the trunk and uploading files as needed for a release. No branches or tags. This is better than our previous practices (no version control at all), but it could definitely be better. After a long discussion the other day, here's our current plan.
All new development will now take place on branches. When we are ready to begin working on a new project/release we create a new branch (ie. "IM 1.4"). Then we do the develpment. Once the release is ready for production, we merge the branch changes back into the trunk. The trunk gets tagged as the next stable release (ie. "0.8.1"), and the production servers are updated to this new tag.
The big advantage we found of this method is that it allows simultaneous projects to be developed without interference. So the CVS tree might look something like this:
I would love to hear how other monks have setup their repositories. Currently our setup is very simple, but expect it to grow to be more complex. I'd especially appreciate insight on how to manage (very) complex setups. How do you keep up with the branches? Is there a GUI to help visualize the tree? Thanks for any advice you can give me.
Update: marked subject as OT. But we use CVS to manage our web apps written in perl so it's only 98% OT. :-)