So far, we have restricted ourselves to the RW
and RW+
permissions while talking about permissions. The former gives users permission to create new branches and tags, and make fast forward pushes to the branches, while the latter allows users to also make non-fast forward pushes and rewrite tags, as well as delete branches and tags.
Tip
This is by far the most common situation, and this syntax serves for the vast majority of access control needs. A push to an existing tag, even if the new commit is a descendent of the current commit the tag is pointing to, is still considered a non-fast forward push. This is because, unlike branches, tags are not meant to be moved; once written, they're supposed to be fixed and never change.
However, in some situations, you may need to explicitly specify the ability to create a branch, separating it from that of pushing a new commit to it. Similarly, you may want to explicitly specify permission to delete a branch or tag, separating...