http://qs321.pair.com?node_id=679787

radiantmatrix has asked for the wisdom of the Perl Monks concerning the following question:

I know this is slightly off-topic for PerlMonks, as it's more a general programming-process question and not in any way Perl-specific. However, I also think it's the best place for me to get a considered answer; and that the answer might be beneficial to PerlMonks novices as well.

I've long used source control -- mostly CVS -- for the obvious benefits. The most common benefit I get is the ability to solve those "damn, it was working yesterday, what changed?" moments.

My organization has a very good policy that you can't break the build -- that is, you only check in changes that have passed the current test suite. This is a good and useful policy for a myriad of reasons.

However, when I'm working on new features or particularly nasty bugs, I quickly found that I wanted to save particular points of my work -- perhaps when I got something promising working, or right before trying something experimental. Keeping track of commented-out code became unwieldy rather quickly as well.

So I developed the following approach -- but, I feel like I'm missing some obvious or easier solution to the problem. I'm curious about how other Monks might solve the same challenges.

Currently, our org has a CVS repository server called 'repoman'. I've set up my own server for development purposes ('devon'). When I work on a change, I:

  1. cvs co code from repoman into the "official copy" directory.
  2. cvs co the same project from devon into the "working copy" directory
  3. rsync the official copy to the working copy, one-way (update the working copy), and excluding the CVS directories.
  4. cvs commit the working copy to devon
  5. Make some changes, but maybe still have some broken code
  6. cvs commit to devon, goto 5 while code doesn't pass all tests.
  7. Once code is working, rsync working copy back to "official copy"
  8. cvs commit to repoman

I keep thinking there has to be a better solution to this that I'm just missing. What is it?

<radiant.matrix>
Ramblings and references
The Code that can be seen is not the true Code
I haven't found a problem yet that can't be solved by a well-placed trebuchet