Resources‎ > ‎Standard Procedures‎ > ‎

Subversion

The one of preferred version control system at ViSLAB is subversion. Subversion bears a great similarity to CVS, including most of the command-line.  GUI front-ends are available for Windows, Unix and OS X:

The full subversion book is available online here. Read at-least the "Guided Tour" chapter, although you should probably read the rest, especially if you haven't used a version-control system before. If you've used CVS before you should probably read Subversion for CVS Users.

The main host for group project repository is project.vislab.usyd.edu.au. Each svn repository is located under associated project group directory under /Groups/groupname. The preferred method to get, update and commit to the repository is to tunnel the session through ssh. For instance, the following operations would be used to checkout the project palladium under the group NCCG:

svn co svn+ssh://project.vislab.usyd.edu.au/Groups/NCCG/palladium

From then on the checkout will remember the location of the repository.

Note that you may be asked for your password multiple times. To remove the password requests use ssh-keys and ssh-agent, see here for a quick tutorial.

In the case that you wish to keep a personal repository you can just create one in your home directory. It is recommended that you use the FSFS backend as this is more robust, especially over NFS mounted repositories. Alternatively you could use Git, which presents a different version-control model.


Configure Subversion

Global Ignores

In order to make subversion ignore certain file types, you can specify file types in ~/.subversion/config .
For example:

global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.model *.pbxuser

Global Keyword substitution

CVS automatically replace certain keywords (such as $Author$, $Id$, $Date$ and $Revision$) in files.  Although subversion does have this function, it is turned off as a default.  In order to use this function at the global level, you can specify that in ~/.subversion/config.

enable-auto-props = yes
[auto-props]
    *.* = svn:keywords=Id Date Revision Author HeadUrL

Subversion commands

  • Checkout a copy:
svn co svn+ssh://username@project.vislab.usyd.edu.au/Groups/NCCG/palladium

            After you check out the project for the first time, you don't have to specify the full URL anymore.

  • To see the difference between your local copy and the one on the repository, run:
svn diff
  • To commit a new version of your file, run:
svn commit
  • To bring your local copy up to date with the one in the repository, run:
sub update
  • Most commands accept a file argument, i.e.,
svn diff some.file
    will only diffs the specified file.
  • For help on a specific command:
svn help <command>
  • To revert a file to a previous revision:
svn update -r <revision number> <filename>
  • You can use the symbolic name PREV for the previous revision. You can also specify the revision by using a date. e.g. ,
svn update -r {2005-03-23}

            Note: Subversion will find the earliest version it finds on that date. You can if you wish also put the time.
  • Add a new file
svn add <new filename>
  • Delete a file
svn delete <filename>
  • To examine which files you've changed
svn status
  • To list the files in a directory for a given revision:
svn list
  • To tag a certain version and keep its copy:
svn copy -m 'comment' <original URL> <tagged URL>
        for example:
svn copy -m 'tag ver-1.0' svn+ssh://project.vislab.usyd.edu.au/Groups/NCCG/palladium/trunk svn+ssh://project.vislab.usyd.edu.au/Groups/NCCG/palladium/tags/ver-1.0
  • To create a new branch:
svn copy -m 'comment' <original URL> <new-branch URL>
        for example:
svn copy -m 'branch ver-2.0' svn+ssh://project.vislab.usyd.edu.au/Groups/NCCG/palladium/trunk svn+ssh://project.vislab.usyd.edu.au/Groups/NCCG/palladium/branches/ver-2.0


Admin Notes

Creating a subversion project:
  • on project.vislab.usyd.edu.au, create a group and its group folder if they do not exist
  • add the project members.
  • set and appropriate permission to the group folder
  • create a svn repository:
$> svnadmin create --fs-type fsfs /Groups/<groupname>/<projectname>

Comments