I started using bazaar after a long camping in the svn field. I had previous experience with cvs as well, and I used tags occasionally.
With svn, once you release a version, you perform a svn copy of your trunk into tags, for example svn copy trunk tags/1.2.0 . In bazaar I created the same repository structure, but the absence of a bzr copy option and the presence of bzr tag made me ponder.
The fact is that I find tags either hard to use, or useless. If I use tags, I basically have my trunk as the only directory, and when I reach a milestone, I tag it. I then continue to develop and tag again when a new milestone is reached. This complicates the following tasks:
- comparing a new version against an old version recursively (with the svn-like approach : diff --brief -r)
- bugfixing an old version, and create new version with its patchversion increased (with the svn-like approach: svn copy 2.0.0 2.0.1, then add the fix to 2.0.1 and commit it)
- getting the version you want without having to check it out (if you check out the whole tree in svn-like, you have all the versions and branches, and you do it only once)
As a result, I use the same svn repo structure in bzr, and I perform a physical copy of the trunk every time. This means that I don't see any real use of the bzr tag command in this arrangement. why should I tag the whole repo revision with a version number, if it contains all of them for every revision?
Could anyone please point me out what I am doing wrong in using and understanding tags for a bzr repo?
Edit
So as far as I see the concept is to have different bzr branches (independent branches, coming from the trunk via bzr branch) for each release. It's like svn, just that you don't put the root directory in the repository. I still don't really see any particular reason for tags, apart of the fact that, if you have say foo-1.0.0 foo-1.0.1 foo-2.0.0 foo-2.1.0 trunk
and assuming I always tagged releases before branching, trunk will have tags for all of them, while foo-2.0.0 will have foo-1.0.0 among its tags, but not foo-1.0.1 because that was branched from foo-1.0.0.
I still don't really see the need for having and using tags. My tag is implicit in the directory name I choose for that branch. I am not really interested in a particular release number, I'm just interested that it's into a specific directory.