views:

140

answers:

3

How do you handle versioning in a continuous integration environment where there is a development branch and a release branch? I'm using git so there is no incrementing repository version to use. Seems like there will be overlapping versions such as 1.1.0 on the dev branch and 1.1.0 on the release branch. Do you just append the text "dev" or "release"?

Also, when you create a release branch do you immediately increment the development branch to the next "proposed" release number? You may not know the next release number yet but if you don't increment it then you have 1.1.0 dev containing new work not included in 1.1.0 release.

So my main question is what is the relationship in the versioning sequences between these two branches?

Keep in mind, I'm not asking anything about how to decide what version numbers to use. I tried asking this before and kept getting comments like "increment major for breaking changes" etc.

+2  A: 

I don't version the dev branch. The devline is the trunk and I periodically branch from dev to a new release folder. So the release branch is full of folders which are basically snapshots of the devline.

IE, under root I have /dev, /releases/0.1, /releases/0.2, /releases/1.0, etc.

I'm not sure if this really answers your question.

David
My experience has been that this is the best way.
Chris Lively
A: 

I would recommend set a final activity for your CI environment to make tags. I believe the git command looks like this: git tag -a name

We use Major.Minor.Release.BuildNumber

though some places use Major.Minor.Release.CheckinNumber

So, if you want to use that then I would version your dev branch, otherwise just version the release branch.

Lucas B
So the build numbers for a dev branch vs a release branch would be unrelated?
JC
Major.Minor.Release.BuildNumber they are unrelatedMajor.Minor.Release.CheckinNumber they are related and coupled
Lucas B
A: 

If you have only one development branch, it is more effective to make it be the trunk and branch off a release branch every time you just want to stabilize for release. If you have multiple feature projects, you can have a branch for each of them with CI setup on those. Once they are done, you merge them one by one to the trunk and once all are merged, you get to the first scenario, where you branch a release branch off of the trunk again.

In any case, you don't keep the development branch going between releases. You want to end it and start a new one for development for the next version. This way some of the features can be branched off during several releases if they take longer. But also you don't have too much mess on your development branches.

You can branch the development branches for the next version as soon as you branched the release branch or even before if you chose to, but it is generally good idea once you stabilize for release, merge the changes from release branch into trunk and from there into the development branches if you do that. If you wait with branching off after release, you avoid few merges there, but you slow down development.

Jiri Klouda