A number of questions have been posed to me of late and brought me to the realization that CloudStacks repo structure is poorly documented, so this is at least an attempt at a CloudStack git repo disambiguation page.
CloudStack maintains a number of branches in the git repo, the most interesting of these are master and 2.2.y. All of the future 2.2 releases have their start from the 2.2.y branch. For larger features, development and testing will be branched off of the 2.2.y branch. In example, the 2.2.y-clvm branch is 2.2.y with the Clustered LVM feature added. Once that feature is tested and ready to go it can be merged back in to 2.2.y.
Master, which is where Acton (v3.0) is currently being developed, is a bit more cutting edge.
How does all of this move from a rather generic branch to what we actually produce a release from? Well, when a release hits code freeze, another version-specific branch is typically created. In example, 2.2.12 has a targeted code freeze of 9/14/2011, and if all goes according to schedule the 2.2.12 branch will be created from 2.2.y on that date. This allows development on the 2.2.y branch to continue to progress, while hopefully stabilizing 2.2.12 and letting the focus on that branch be about solving those version specific bugs.
Finally, when a version specific branch is declared 'gold' and ready for release, the release engineering team will tag the release with the version number. To ensure there are no conflicts with the version specific branches, the tag will have tag- prepended. So when 2.2.12 is tagged for release it will be tag-2.2.12. All of the releases are built from the versioned tag.
...