Difference between revisions of "Using Subversion"

From GNUstepWiki
Jump to navigation Jump to search
(notes on layout)
Line 6: Line 6:
  
 
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).
 
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.

Revision as of 00:17, 30 January 2006

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.