Re: Git workflow for beta/production

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2011-03-14 at 15:27 -0700, Joseph Huttner wrote:
> I am in search of a new Git workflow.  Previously, my team was
> essentially using using gitflow by Vincent Driessen (nvie).  It worked
> very well, but the needs of project have changed, so here are the new
> requirements:
> 
> 1.  A "Beta" environment that contains stable code for all features
> being considered for "Production."
> 2.  A "Production" environment.  Rock-solid, well-tested code only.  
> 
> The catch is that after a feature has been stomped on in Beta, it
> **may** go to Production, but only if Product Managers still think it
> is an important feature.  In other words, there is no guarantee that a
> feature in Beta will ever make it to Production.  It may be axed
> completely, in which case it would never get to Production and would
> be taken out of Beta.  Also, there is no guarantee that features that
> do make it to Production will go in in the order that they went in to
> Beta.  

Hi Joseph,
First off, don't discard the baby with the bathwater. If Nvie's workflow
was working for you don't discard it completely and outright--that's
just asking for problems. Second, don't be afraid to be aggressive about
rewinding your "beta" branch (as noted that's "next" around here at
git.git, but "pu" might be an even better model).
It sounds to me as if just one additional "branch family"--a "customer"
beta--could be added to Nvie's base structure to accomplish what you
need. The policy on this new track would be to expect it to be
rewound/rebased/restructured frequently. From there whole features would
be picked out (per management decision) and put into the equivalent of
the "[proposed] release" branches and whole public releases pushed from
there to master ("release" would therefore also be rewound as
needed--hopefully not very often) for packaging. The major change in
code flow is that things no longer migrate back from "release" to
"development" (bleeding-edge), "beta" (aka a "customer beta"--which is
what your management team seems to be asking for), or anywhere other
than master--basically making "release" a clean-room version of beta
with no new code in it.
I would not advise outright discarding of any "hotfixes" branch you
have, I would just make it merge to master only via "beta" and "release"
except in cases of emergency. Let the management team decide what
qualifies as that kind of emergency.

Why continue to have the "release" branch at all? Well, it sounds to me
as if you are being asked to make absolutely certain that what makes it
to master (and therefore what makes it to your packagers) is tested as a
whole unit. You can't do that cherry-picking directly from beta to
master (customer production code). Having the "clean-room" post-beta
"rc" branch gives you a safe place to do this--good for cases when
somebody insists on including "feature y" from the customer beta without
also including "feature x" forgetting that y depends on x to build or
run properly. This should have all been hashed out in beta--but that's
harder to do when beta is considered to be a "new feature customer demo"
branch as well as "beta" branch. So, the moral of the story is roll
stuff into a safe place after the "feature demo" beta for approval and
unit testing before pushing to master and risking causing confusion in
the ranks of the packaging team. (It is never good when a customer hears
that a vendor didn't mean for them to be sent version n.xx of the
production code but instead meant to send them n.xy.)

Good luck!

-- 
-Drew Northup
________________________________________________
"As opposed to vegetable or mineral error?"
-John Pescatore, SANS NewsBites Vol. 12 Num. 59

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]