Difference between revisions of "Using Subversion"

From GNUstepWiki
Jump to navigation Jump to search
(adding link to zsh tab completion module)
m
 
(11 intermediate revisions by 6 users not shown)
Line 1: Line 1:
== Setting up Subversion for Developer Use ==
+
{{delete| gna is obsolete }}
 
 
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 [http://svn.gna.org/viewcvs/gnustep/ 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 ==
 
 
 
* [http://svnbook.red-bean.com Version Control with Subversion]
 
* [http://svnbook.red-bean.com/en/1.1/apa.html Appendix A: Subversion for CVS Users]
 
* [http://gcc.gnu.org/wiki/SvnSetup 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.
 
* [http://www.aeruder.net/software/misc/softwarelist.html ZSH svn tab completion] - On this page is a tab completion module that can tab complete into subversion repositories.  Very handy for ZSH users.
 

Latest revision as of 13:55, 28 April 2018