MicrobranchingEdit
Microbranching, better known as "using topic branches", is a technique that I use when I wish to develop a specific, small feature without distrupting the main line of development or degrading its stability. It is also commonly used when submitting patches to an "upstream" project which you do not control; you group together a logical set of changes on a "topic branch" where they can be easily managed (revised, or kept up to date using rebasing) and then submitted as a patch series (see "Creating and submitting a patch via email with Git").
The technique consists of creating a local-only branch using a branch-savvy version control system such as Git or SVK, working on the feature, and then using git merge
, svk push
or similar to propagate the changes back to the trunk, or publishing them upstream as a patch series sent via email (for projects which you don’t control directly). These topic branches or microbranches are short-lived.
An example using SVK
This is an example of a creating a microbranch for the purposes of adding the #include
directive to Walrus. This feature is well-suited to a microbranch because it is a relatively complicated directive (it requires a sub-parser to be spawned for each included file) but it is still reasonable to implement it within a short time frame (no more than a few days).
Creating the branch
# use the "-p" switch to create "//local/Walrus/" if needed
svk cp -p //mirrors/Walrus/trunk //local/Walrus/include-directive \
-m "Microbranch for implementing '#include' directive"
# check out a working copy of the microbranch
svk co //local/Walrus/include-directive include-directive
# make sure all specs pass
cd include-directive
rake make
rake spec
Pulling changes in from the trunk
It’s unlikely that any changes will be made on the trunk while working on this feature because this will be such a short-lived branch.
svk pull
Pushing back changes
svk push --verbatim
The --verbatim
switch prevents SVK from including SVK-specific meta-information (such as local revision numbers) in the log entries.
Disposing of the microbranch
svk co --detach
cd ..
rm -r include-directive
Updating existing copies of the trunk
Assuming there is a checked-out copy of the trunk in src
:
cd src
svk up -s
And again ensuring that all specs pass:
rake spec