Because Subversion does not have explicit tags, and everything in the repository is just another folder or file (and thus editable), we sometimes have the need to secure or force our repository layout.
Creating a tag is just making a copy of the trunk (or any branch) so you have a snapshot of how the trunk looked at that given time. If you make changes in it, it is not just a snapshot anymore.
The solution for this problem lies in a pre-commit
hook, which uses the --copy-info
parameter of theĀ svnlook changed
command.
The output of a normal svnlook changed
looks like this:
$ svnlook changed -t 670-ja /var/svn/repo A tags/0.1.1/
Whereas the the command with --copy-info
looks like this:
$ svnlook changed -t 670-ja --copy-info /var/svn/repo A + tags/0.1.1/ (from trunk/:r6911)
The + at position 3 indicates a copy, so in combination with the tags/ string, you can block commits to tags without this +.