I am working in a place where linear development is something of a past - there is dozens of programmers, and we all do work on code using GIT.
It's the release management task that makes the 'linear versions' out of all of those things, and it is somethign that MaNGOS admins should do.
It is how we use git:
There are three major GIT repositories. One is called "production", another is called "uat", last one is called "testing"
On "testing" there is always a version that is actually processed by.. um.. testers . UAT is done by end users.
On "production" there is always a released version.
At start, every developer does clone from current production version (some exceptions apply but rare, only when we do the parallel development of few productions at once)
1) Every task done by any developer is in his/her own branch of the repository clone
2) After finishing task, they send the confirmation that change from their repository is ready to be picked up from branch 'xyz'
3) At some point, release manager pulls data from finished tasks into test repository. The version numbering is assigned by release manager
4) When testing is finished, release manager decides which features will be pulled to the "uat" version
5) Tests are proceded again, this time on "uat" repository version
6) If they are fine, everything is pulled ito "production" repository.
It's the *release manager* task to pick up which tasks are to be combined into release, and his/hers task to assign versions. Normal developer is never able to pull data into even the testing repository.
If more than one developer should work on one feature, they can do their own repository tree structure themselves. Feel free
The key is to make all development in branches. Every separate task = separate branch, or sometimes even separate repository clone.
We work like that for quite few months, and after initial whining ('what was wrong with SVN???') nobody is trying to get back to Old Way.
Especially those who were forced to do few larger merges in SVN
So... how I'd like to see it in MaNGOS?
I would love to have similar structure, maybe not as complicated but rather:
+ "Released Version"
+-- "Next version" (nightly?)
+---- | all developers
This way the data from developers could be pulled into "Next version" repository, and when all features are tested and complete, they could be pulled into Released Version. How numbering is done, it's up to person responsible for the pulling task.
Sequential revision numbering is really a bottleneck.