What is the difference between a tag and a branch in SVN?

SvnTortoisesvn

Svn Problem Overview


I'm working with SVN Branches and TRUNK for years, but never with TAGs

Can someone advice what is main difference between those? What is main purpose of Tagging?

Svn Solutions


Solution 1 - Svn

This is from http://svnbook.red-bean.com/en/1.5/svn.branchmerge.tags.html

> But wait a moment: isn't this tag creation procedure the same > procedure we used to create a branch? Yes, in fact, it is. In > Subversion, there's no difference between a tag and a branch. Both are > just ordinary directories that are created by copying. Just as with > branches, the only reason a copied directory is a “tag” is because > humans have decided to treat it that way: as long as nobody ever > commits to the directory, it forever remains a snapshot. If people > start committing to it, it becomes a branch.

Technically, it's the same as a branch but conceptually we take it as a snapshot. In my svn repositories, I know that branches will include large features that may or may not have been merged into the trunk, but I use tags to mark release versions only.

Solution 2 - Svn

The only difference is what you use them for, they are the same.

A branch is where you can develop work on a different version of the code to the main trunk.

A tag is a used to "tag" a release. Let's say I work only on the trunk. When I send V1 to a customer, I create a "V1 Tag" for it. Then I work on V2. When the customer has a problem with V1, I can just checkout the tag and begin debugging the issue on the exact same version as the customer. You can check into a tag, but you are not supposed to. If you need to do a V1.1 release, you create a branch from the same version as the V1 tag, and check in the fixes to that, and Tag it when it's released as V1.1.

Solution 3 - Svn

"Trunk" and "Branches" are typically used for active and current development. It is where users commit/checkout files. It is usually where lots of activity happens.

On the other hand, "Tags" are typically used for creating a snapshot and milestone of your development. It is not really ideal for your team to make any commit/checkout on Tag folders.

Here are two examples of the applicability of Tags:

  1. Branch archiving - When a Release or Feature branch has been finished or completely scrapped, you would usually delete the branch and this would effectively hide it from the HEAD revision. Some people don't usually delete these folders for archiving as they would prefer to see all their releases/projects. This though can cause the branch tree hard to navigate. That's why it is better to keep only the active and running project releases and features in the HEAD reivision of the branches folder. You can create a Tag copy of the last revision of those archived branches so that you can still see them on the HEAD revision. That way you can have quick snapshot of the last revision of the branch before the branch was archived and also keep things in the branches tree tidy.

  2. Keeping milestones - Projects usually have many phases of development. Dev, UT, QA, pre-QA, post-QA, BAT, post-BAT, PROD, pre-PROD, post-PROD. You can use tags to make a snapshot of your development at every significant stage instead of relying on Revision numbers, Dates, or Comments.

Tags can be a big help on organizing things but can sometimes be chaotic too. It is important to have a standard naming convention for naming Tag folders.

Solution 4 - Svn

Tags and branches are technically equivalent. The difference is how they are typically used.

You use branches to make an editable copy of code so that you can develop a stable and a working copy at the same time.

You use tags to make a read-only copy of code so that you can conveniently get that code later. Here's how this is used with daily builds. Each daily build just creates a tag with a name containing that build number. Once you need to get the sources of that long ago build later (for example, to reproduce a bug) you just export them from that tag.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMaciejView Question on Stackoverflow
Solution 1 - SvnJonathon BolsterView Answer on Stackoverflow
Solution 2 - SvnDaveShawView Answer on Stackoverflow
Solution 3 - SvncounterflowView Answer on Stackoverflow
Solution 4 - SvnsharptoothView Answer on Stackoverflow