Subject: Re: Workflow Help

From: Andreas Ericsson <[email-masked]>
Date: Tue, 21 May 2013 15:49:23 +0200

On 2013-05-21 02:59, Quilkey, Tony wrote:
> Hi,
>
> I am looking at formulating and then documenting our vcs workflow
> using Git at work. I have an idea of how I want things to work, but am
> a little hazy on some of the details.
>
> Our basic workflow will be based around:
> http://nvie.com/posts/a-successful-git-branching-model, with a few
> exceptions.
>
> We would like to create our release-* branches from the last release
> tag. From there, we would like the ability to cherry pick (or take the
> complete diff) commits from the develop branch.
>
> So, we are after is:
>
> 1) Create topic (feature) branches from develop, and merge back into
> develop when complete.
>
> 2) Once it is decided we are packaging a release, make a release-*
> branch from the previous release tag.
>
> 3) Cherry pick/merge/whatever any commits we want from develop into
> the new release-* until it is complete.
>

This will drive you crazy. If you have any sort of tempo on development
and separate your commits into small series, it will be close to
impossible to track all related changes. I know, as some colleagues
tried it not long ago.

A better workflow is to use topic-branches for pretty much everything.
If the branch is mainly a bugfix, although the bug has to be fixed by
refactoring or remodeling something, it gets merged to whatever "maint"
branch you have (in your case I'd imagine that would be "release-X"
something). Then you merge the release-branch into develop and take
the other topics directly into develop.

We do something like this:

* work, work, work (mostly on master)
* cut a release by setting a tag and creating a maint-branch for it
   (actually, it's a beta-release that goes off to QA, but whatever)
* maint branches are 100% test-driven development
* bugfixes (with their test-cases, as well as test-cases for other
   affected areas) go directly to maint (although possibly via a
   topic-branch if the change is bigger than trivial).
* maint is merged to master
* repeat as necessary

It works reasonably well and ensures a high code quality with very
little overhead. Sometimes people commit bugfixes to master by mistake.
In that case, we simply cherry-pick the fix to 'maint' and then merge
maint back to master as usual.

It does require some sort of stability between projects and the libs
shipped by and used by the project though, but assuming you haven't
done things horribly wrong at the design stage, this model should work
reasonably well while avoiding the whole "where are the bugfixes and
in which order do I need to apply them?" issue.

-- 
Andreas Ericsson                   [email-masked]
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

Considering the successes of the wars on alcohol, poverty, drugs and
terror, I think we should give some serious thought to declaring war
on peace.