Today we changed our branching style of the Floorplanner code base. I had it in my head for a long time, but I actually changed it until I read this post. In the old setup we used the style that is called Branch per Release.
In the beginning we had a lot of custom projects running on one Floorplanner code base. We wanted to improve the Floorplanner itself but changes in the source could cripple the custom projects. That’s why we created a branch for every custom project. This way we had a stable codebase for every custom project and for the Floorplanner itself. When we fixed a global bug we merged the fix to all the branches. Nowadays we don’t have any custom projects running on the same code base anymore. We do have one branch (not the trunk) in which we were working on the latest release. So today I decided that this had to change. We merged the branch to the trunk and new features (tasks) will be developed in a branch of their own. When the feature is done it will be merged back to the trunk. This is called the Branch per Task.
Branch per Release Every release is a new branch; common changes are merged between the releases. Branches are killed off only when the releases are no longer supported.
If you want to know more about branching, read Jeff’s post Software Branching and Parallel Universes.
Branch per Task Every development task is a new, independent branch. Tasks are merged into the permanent main branch as they are completed.