I've been able to convince my group to use semantic versioning and move to git (from CVS, where all development happened on the trunk).
This is what we've been using for a bit (where the version branches denote the introduction of some kind of new functionality):
master
*
|
* * version 2.0 branch
| /
* *
|/
* * version 1.0 branch
| /
* *
|/
*
|
...
The problem is that when there's a bugfix that needs to be made on the version 1.0 branch, that fix needs to get echoed up to version 2.0 and master. We've been cherry-picking, but I feel like that's more error-prone than I'd like (and I feel like it'll become unmanageable as time goes on).
There are some limitations to what we're doing--it's legacy code, and there isn't a lot of testing being done (starting to introduce unit testing, very little integration testing), so keeping stability on those version branches (not introducing a lot of regression errors) is important.
Do you guys have a better way to approach this than cherry-picking? Is there a better workflow to use? Really appreciative of any help you can provide.