In SVN, branch/tag is often confused in a function option.
In terms of implementation, branch and tag are implemented using copy for SVN, so their default permissions are no different from general directories. As for when to use tags and when to use branch, it is entirely subjective to choose based on specifications and needs, rather than mandatory (such as CVS ).
Generally,
Tag is used to build a milestone. Whether it is release or not, it is a usable version. Here, it should be read-only. It is more of a display, giving a readable mark.
Branch is used for parallel development. parallelism here refers to comparison with trunk.
For example, if 3.0 is developed, a tag, tag_release_3_0 will be created at this time, and then a release will be created based on the tag, such as installation.Program. Trunk enters the development of 3.1, but 3.0 discovers a bug. Therefore, you need to create a branch based on tag_release_3_0, branch_bugfix_3_0, and perform bugfix based on this branch. When the bugfix ends, create a tag, then, determine whether branch_bugfix_3_0 is incorporated into the trunk as needed.
Note that SVN is a global version. In fact, this is a tag, So we often see what release is based on the 2xxxx version of the XXX project. That's what it means. However, it also clearly gives the concept of a tag because it is more readable. After all, it is much easier to remember tag_release_1_0 than to remember a large version number.