Mac OS X 10.5 Leopard ships with Subversion 1.4.4 pre-installed. It also ships with Apache2 pre-installed. It does not, however, ship with a pre-installed subversion repository configuration.
So let's say you want to create your own subversion repository host on your Leopard box your own source code management goodness?
You could go to the subversion homepage and download the free svn book and sort through the instructions trying to figure out how they apply to you... Or you could follow these simple directions which I've laid out for you.
Make a Repository
The first thing you need to do is to make a repository. Actually, for my needs, I had to make multiple repositories, so these instructions will set everything up to make that work. It really only changes two steps anyway, so it isn't a big deal.
Now I decided to make my repository collection root directory be in /Users/Shared/
, but you can really make it be anything you want, including the ever popular /usr/local
. Just be sure to replace /Users/Shared/
with your directory of choice whenever necessary.
Anyway, I opened Terminal and entered the following commands:
$ sudo mkdir /Users/Shared/svn $ sudo mkdir /Users/Shared/svn/reposname $ sudo svnadmin create /Users/Shared/svn/reposname $ sudo chown -R www:www /Users/Shared/svn/reposname
Note that you can create multiple repositories by following these directions but replacing every instance of reposname
with the name of the repository you want to use. Thus, if you have multiple repositories, you will have multiple directoris in /Users/Shared/svn
Make Access
Most directions do this later, but I'm going to do it now because I think you are smarter than that.
You might want to create a passowrd file, unless you want full public access to your repository. For our purposes, simple http basic authentication is fine, but remember that the password is only weakly encoded and the traffic isn't encoded at all, so a snooper could get to the information if you access your computer outside of your own computer.
So if you do want to use authentication, create the password using the following command, substituting username
for a user name of your choice, and following the directions for password creation:
$ sudo htpasswd -cm /etc/apache2/svn-auth-file username
To add other users to the file, just ditch the c
switch in the -cm
options to htpasswd
. The c
stood for create, and since the file has been created you don't want it anymore.
Note that you can put the svn-auth-file anywhere you want, but this seemed like a good place for it in my mind. (Just remember where you hid it from yourself if you put it anywhere else.
Apache Configuration
Navigate to /etc/apache2/other
and use your favorite command line text editor as root to make a file named anything you want (I chose svn.conf
, but you could name it foobar_banana.conf
and it would still work!):
$ cd /etc/apache2/other $ sudo vim svn.conf
Now that you are editing this file as root, you want to make it contain the following bits, and save:
LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so <Location /svn> DAV svn SVNParentPath /Users/Shared/svn AuthType Basic AuthName "Subversion repository" AuthUserFile /etc/apache2/svn-auth-file Require valid-user </Location>
Note that you can leave off all the authentication related stuff if you didn't want authentication on your repository. Also note that you need to fix the SVNParentPath and the AuthUserFile if you varied from my directions.
Restart Apache
Now restart Apache. This can be done in the Sharing panel of the System Preferences application. Just click to turn off, and then back on, Web Sharing.
Now, if you didn't make a mistake, you should be ready! Try going to http://localhost/svn/reposname
(where you need to put the repository name you chose earlier instead of reposname!) and see what happens.
If you are lucky you'll see revision 0 of your repository. But most people are human and will have made a typo that results in an error. For hints on what created the error, trying checking out /var/log/system.log
and /var/log/apache2/error_log
for hints as to what you did wrong. (And as a bonus, the Console application works great for monitoring thes logs as they are writen to!)
Where From Here?
And now you are ready to use your repository. At this point I figure you already know how to use SVN and don't need my help anymore. But if you need to know how to use SVN, just refer to their book, which tells you everything you need to know, including how to make your server better!
EDIT (11/6/07): Forgot to encode my character entities in the example script source. I fixed this so that the <Location>
tag actually shows now.
EDIT (04/23/08): The chown
line now uses the full path as it should. Thanks to all those who pointed this confusion inducing mistake out.