Checking GNUstep out of SVN Anonymously
You cannot use SVN+SSH unless you are a developer, and have a username and SSH public key registered at gna.org. See below for more detauls. You cannot check out /devmodules unless you are a developer. /modules is the same as devmodules, except the SVN external references work for anonymous SVN checkouts.
Setting up Subversion for Developer Use
The first thing you will want to do is setup the ssh access to svn.gna.org. If you cannot type
svn list svn+ssh://svn.gna.org/svn/gnustep/devmodules
without having to type a password or in some way change the above command, you will need to visit the Svn SSH Setup page (this includes if you have to specify a different user).
Some background on repository layout
To familiarize yourself with the layout, I would recommend looking at the web-access to svn for GNUstep. You will notice that every project is in its own portion of the repository. For example:
/libs /libs/gui /libs/gui/trunk /libs/gui/branches /libs/gui/branches/dawn /libs/gui/branches/... /libs/gui/tags /libs/gui/tags/alex_last_semistable /libs/gui/tags/...
This layout is very handy for having a per-project repository. I can easily branch or tag just /libs/gui and it all stays in its own namespace. However, what this DOES mean is that you cannot simply checkout /libs/gui or you will end up with several copies of the source. To get around this, we are using a nifty feature of Subversion called externals. Externals are metadata on a directory that basically tell the svn client to checkout some other url into a subdirectory when it is checked out. So if I type:
svn proplist -v svn+ssh://svn.gna.org/svn/gnustep/devmodules/core
It will tell me that the svn:externals property contains:
gui svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk back svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk base svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk make svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk
So everytime I checkout /devmodules/core the svn client will automatically go to these URLs and check them out into subdirectories. When I make changes in gui/ and commit them, it will really commit to /libs/gui/trunk. For the most part if you checkout /devmodules, the externals have already been setup such that it will checkout something similar to checking out the whole repository before.
Tips, Tricks, and Resources
- Version Control with Subversion
- Appendix A: Subversion for CVS Users
- GCC's SVN Setup page - Look especially at the section on ssh connection caching.
- Subversion_Migration - Some initial notes on the layout of the repository.
- ZSH svn tab completion - On this page is a tab completion module that can tab complete into subversion repositories. Very handy for ZSH users.