Forum OpenACS Q&A: Response to How do you separate project customisations from improvements?

C.R., did you read Ron's article, and the other links I give at the top of my document? Ron's article is probably the best introduction to this stuff. But, here we're not talking about testing periodic Dev -> Staging -> Production releases, we're talking about creating two ongoing parallel lines of development, one on the trunk, one on a branch. So the mechanics are what Ron describes as the "two branch" method.

You always want to place branch tags across the whole project, never just a few individual files. If you want, you can tag only a few individual files in order to do merge operations across the two branches, but when creating the branch you'd better tag all the files.

One thing I'm foggy on, is how to best keep track of what changes you've already merged from one branch to the other, and which ones you haven't. (Incidentally, I say "branch" all the time when I mean "branch or trunk". The trunk is really just another branch.)

If you make a change on your OpenACS Fixes branch, then presumably you're always going to want to merge all those changes back to your Custom branch. So my gut tells me you probably just want to periodically tag everything on the OpenACS Fixes branch with a myproject-openacs-fixes-2001-11-01 tag or something like that, and merge it all into your Custom branch.

Where it gets hairy is merging changes from Custom to OpenACS Fixes, because presumably you only want to merge some of those changes across. I don't have a good answer for that, I think I'd have to do it for real for a while in order to decide how to cope.

But when merging from Custom to OpenACS Fixes, I suspect that one way or another, you're going to end up with a whole bunch of random tags saying "fix-4239-blah-blah" scattered all over various files. I think you'd want to place tags just on the individual affected files in that case, not the whole checkout, but I don't remember for sure. All these random tags everywhere do sound kind of ugly, though. This might be a good reason to instead make all your bug-fix changes in your OpenACS Fixes branch first, and then merge them into your Custom branch, rather than vice versa. That way you'd only ever be merging in one direction, from OpenACS Fixes back to Custom, which should help keep things simpler. But again, my thinking is kind of foggy on this, and in practice, no matter how much you plan to only do merges in one direction, eventually you're going to modify something on the "wrong" branch and have to merge in the other direction, too. But limiting the number of such "wrong direction" merges may help to keep things manageable.