Let me do some proposal. If people are happy with them, I can start some wikification.

First here are the branch already existing :

dev : development branch. It is used to merge new features.
master : is the branch where the next version is stabilized (right now, 2.061). It receive only bug fix. eventually new features if the feature is of strategic importance.
2.60 : contains the current released version of D + bug fix.

Release process :

When branch 2.60 have enoug bug fixes to justify a new release, a tag is created (2.60.N+1). The amount and the importance of corrected bugs will dictate when the release is done?

When master is stabilized enough, a new version of D can be released. A new branch s created from master, named 2.61 and a tag 2.61.0 is created :

git checkout master
git branch 2.61
git checkout 2.61
git tag 2.61.0

Then, the dev version is merged into master and a new stabilization process begin :
git checkout master
git merge dev

At some point, 2.60 will not receive any more bug fix, and will be considered very stable, or dead, depending on one's standard (both are kind of the same).

I advice against maintaining a log of 2.XXX branches, as too much choice is as bad as no choice for the user, and it is no better for us. 2 is IMO the right amount.

NB: I have chosen the 3 number system for branches names, this is up to debate, but as it is widely used in programming languages it is a good base. Anyway, let's not debate the name for too long, as it really don't matter, and concentrate on the workflow.

On Wednesday, 12 December 2012 at 16:14:44 UTC, Andrei Alexandrescu wrote:
Beyond that we need to have a wiki page with workflows:

"To initiate a new feature"


A new feature is developed in its own branch. The reference is the dev branch. In git it goes as follow :

git checkout dev
git branch featureName

Development of the feature.

You can work on many feature at the same time; each one in its own branch. You initiate them the same way and switch from one another with git checkout.

Before submitting a feature, it has to be reabsed as follow :

git checkout featureName
git rebase dev

When the feature is ready to inclusion into dev, the dev can make a pull request.

"To initiate a bug fix"


The same as for new feature, except that you start from the branch the bug is in. If the bug is in several branches, then the most stable one is choosen, as i is usually easier to bubble up the bugfix from a stable branch to dev than the other way around.

"To initiate a library addition without formal review"

"To initiate a library addition with formal review"

...


I don't really know what to do here. I guess bug fixes on the library can be done the same way, but something specific probably have to be done with new modules.

All of these should be subsections in the documentation.

"If your branch has conflicts"


If your branch has conflict, it is up to you to resolve them. The conflict will most likely occurs when rebasing. In such case, git status will inform you on which files are impacted. Edit the file to resolve the conflict and do git add file, then git rebase --continue .

If you don't want to resolve the conflict now, you can abort the rebase by doing git rebase --abort

"If your branch became really messed up"


Well this one is difficult, because it is unclear what is wrong, so unclear ho to solve it.

Is that good ?

Reply via email to