I use Subversion and I stick to the trunk, tags, and branches convention.
The usage pattern I strive for is loosely the following:
- start with trunk
- do some work
- tag release from trunk
- deploy release
- create a feature branch from a tag
- do work
- merge the branch with the trunk
- go to step 3.
Given this pattern, one builds up quite a collection of tags over time. Do you retain those tags for very long, or is your policy to remove those tags that aren’t in production? My feeling is that it makes sense (especially in Subversion) to eventually “retire” old tags and depend on the history of the trunk and preserved tags if one needs the history, but what policies are in use?
My philosophy is that I usually lock tags – i.e. “freeze” the branch – once the code is released. Once source code in a branch isn’t in maintenance any longer, I remove the tags. So, usually this means that when the version for the tag is no longer “in the field”.
However, there are two assumptions here that I should make clear –
I guess it just comes down to ‘how long do you expect to support the code in this branch?’