Last Updated: 25 Sep 2025
This is an old revision of the document!
Locking a Branch in Subversion
If you branch your code in your subversion repository, you may eventually want to 'lock' or 'freeze' one of the branches you've created, so that developers can't continue to check in code in that branch.
Subversion has a nice lock command, but it doesn't do what we want. It's designed only to indicate to other svn users that a particular developer is working on a file, and as such you can only lock files and anyone can 'steal' a lock.
Instead, the best way to 'lock' a branch is to use path-based access control to make part of your repository read-only. The subversion manual has all the gory details, but briefly, you'll want to:
- Setup an AuthZ rules file
- Add rules to that file to lock certain branches or tags
Here's how you do it.
Setup a AuthZ Rules File
You need to setup a configuration file to hold the rules governing what part of your repo should be locked.
Apache Setup
If you're using apache to serve your subversion repos, you'll want to use the AuthzSVNAccessFile directive to point to your file. Be sure you're loading the mod_authz_svn module in your main httpd.conf.
Here's roughly what your virtual host should look like. Note that I've also included .htaccess authentication.
<VirtualHost 10.0.0.10:80>
ServerName svn.mydomain.com
<Location />
DAV svn
SVNParentPath /var/svn/repos
AuthType Basic
AuthName "My SVN Repo"
AuthUserFile /path/to/.htaccess/file
Require valid-user
AuthzSVNAccessFile /path/to/.authz/file
</Location>
...
</VirtualHost>
I usually put the .authz file in the same place as my .htaccess file, so I can easily edit both at once.
svnserve setup
If you're using svnserve, you need to make the authz-db variable (within svnserve.conf) point to your rules file.
Setup the Rules
Once you have the .authz file setup, you'll need to put some rules in. First, you'll probably want to allow anyone who's authenticated full access to your repo (*). Then, you'll want to make certain paths read only. Your authz file might look like this:
# Allow full access to all repos [/] * = rw # Lock MyRepo Branch_A # Note that you only need the MyRepo: prefix if you have more than one repo [MyRepo:/branches/branch_a] * = r # Lock all tags in all repos; only allow 'david' to create new tags. [/tags] * = r david = rw
(*) Important Note: I'm assuming here that you're a private developer who does not want to make her repository available to the world. Your users will authenticate via either svnserve or apache's .htaccess mechanism, and only after that will they have full access to the repo. If that's not your situation, you may want to adjust your setup.
For More
For more on this, check out:
- A great Stack Overflow post on access control in subversion
- Path based access control in the subversion manual.
Discussion
Nice one,
You can do the trick via pre commit script too.
http://www.scmtechblog.net/2014/08/svn-tag-and-branch-lock.html