Pull freeze

Jonathan M Davis jmdavisProg at gmx.com
Tue Jul 31 01:57:35 PDT 2012


On Tuesday, July 31, 2012 01:10:35 Walter Bright wrote:
> On 7/30/2012 11:24 PM, Russel Winder wrote:
> > On Mon, 2012-07-30 at 23:40 -0400, Andrei Alexandrescu wrote:
> > […]
> > 
> >> Walter and I will dedicate time after 2.060 to improving the process.
> > 
> > "Improve" implies tinkering at the edges. This situation requires a
> > "change" or perhaps "revolution". I suggest just switching to a
> > ready-made DVCS / Git process that is known to work, and is well
> > documented, rather than trying to craft a new one based on CVCS  /
> > Subversion / CVS history.
> 
> We're already using Git.

The complaint is that we're using git as if it were subversion. We never 
branch, whereas you usually branch quite heavily when using git. If we were 
using git like it's normally used, we'd be branching for betas (as well as 
splitting the new feature development branch from the bugfix branch). Instead, 
we have a single branch that we do everything on, forcing us to stop merging 
any pull requests when we do a beta. The typical way to do this with git 
involves using multiple branches, not doing everything on trunk/master.

The simplest way to do this would probably be to branch for a release whenever 
we do a beta. We then continue to merge stuff into master as normal. But when 
there's a fix that we need for the beta, we cherry pick it from master and put 
it in the release branch. And when the release is finally ready to go, we tag 
the appropriate commit on the release branch, and that's the release. That 
way, doing a beta does not halt normal development at all. Rather, it's done 
in parallel.

If we take this further as most large open source projects do and had a 2.x.y 
versioning model, then the work for x would be on master, and we'd cherry pick 
bug fixes to the y branch as we went along. Then at intervals, we'd branch y to 
create a release branch and do the beta and subsequent release from that. So, 
we'd be doing bug fix releases based on the y branch at regular intervals 
(probably monthly) which didn't include any new features at all. In theory, 
this promotes greater stability. So, we'd get 2.60.0, 2.60.1, 2.60.2, etc.

Then at some larger interval (generally 6 - 12 months, depending on the 
project; we'd probably want to do 6 months at this point), we'd branch x to 
create a new y branch and start using that as the bugfix branch. So, the first 
release from that would include all of the new features that had been being 
worked on over the previous 6 months. So, if we'd been releasing 2.60.y we'd 
get a 2.61.0 release at that point, and the subsequent releases would be 
2.61.1, 2.61.2, etc.

That model is essentially what was being argued for in the newsgroup recently 
which ended up with dlang-stable being created.

There are a variety of articles online describing branching/release models 
along those lines, but that's typically what happens with git on the most 
basic level. You branch heavily (and actually, as described here, the number 
of branches is quite light for git). A more complicated scheme which was 
recently brought up in the newsgroup is described here:

http://nvie.com/posts/a-successful-git-branching-model/

But I very much doubt that we want to do anything quite that complicated.

Regardless, the fact that we don't even branch for a beta is a definite 
indicator that we're using git as if it were subversion. If we were _really_ 
using git as intended, then not only would we be branching for betas and for 
the releases, but we'd be creating temporary branches for new features as 
they're ironed out (merging them into master only when they're completed).

- Jonathan M Davis


More information about the Digitalmars-d-announce mailing list