Version Control strategies for new software

Here are three VC strategies for new projects, they are not fit for legacy or maintained production systems.



Live trunk

Suited for new projects with small teams.

/trunk - Latest code, constantly being committed to. May not work, code is sanity checked and compilable.

/branches/versions - Stable and tested, weekly/monthly snapshots of the trunk. For reviews and QA, Never changes. Can also be just labels.

/branches/cross_features - Potentially dangerous, experimental and cross-conflicting, cross-team features. Merged to trunk when the feature is done. Should be used rarely.



Team branches

Suited for projects with very isolated teams (especially offshore).

/trunk - Stable, fully tested code, never committed to, only merged to.

/branches/teams - A branch for each team, merged weekly or monthly to the trunk with extensive testing.

/branches/versions - Same as "Live trunk". Stable and tested, weekly/monthly snapshots of the trunk. For reviews and QA, Never changes. Can also be just labels.



Feature branches

Suited for more mature projects with more code lines and at least 3 people working on each feature.

/trunk - Same as "Team branches". Stable, fully tested code, never committed to, only merged to.

/branches/features - branched and merged from trunk after features are fully completed and tested with trunk.

/branches/versions - Same as "Live trunk". Stable and tested, weekly/monthly snapshots of the trunk. For reviews and QA, Never changes. Can also be just labels.