Subversion (SVN)¶
Side note¶
Based on our own experience we recommend Git instead of Subversion nowadays if there's no strong preference for any versioning system. See the following README pages for more information.
Differences to CVS¶
While CVS is file based and sees no relationship between files except in which directory they reside, Subversion (SVN) sees a project as a whole thing with one global state and not the states of many single files. So revision numbers are global for a whole project. One revision means a consistent state over all files. Another revision number specific difference is that revision numbers are integers and start with revision 1 at import.
Another effect of Subversion's global view is, that also directories have revisions, that files can be moved around or copied with theirt whole history without fiddling around in the repository itself. Then also file properties (MIME type, svn:ignore for directories, arbitary, project-specific properties, etc.) are versioned in the repository, too.
Create a repository for your project¶
If you collaborate within a group of people, all participants should have read and write access. Nobody else should have write access.
Create it on one of our group drives¶
If all your contributors do have a D-PHYS account and access to the same group drive, you can host your Subversion repository on that's group's drive. To allow it to be used on all our Linux workstations independent of the Subversion version being installed, you need to configure some backwards compatibility:
ssh login.phys.ethz.ch svnadmin create --pre-1.5-compatible /home/<group name>/[<some optional path>/]<your project repository>
You then can always use
svn+ssh://login.phys.ethz.ch/home/<group name>/[<some optional path>/]<your project repository>
as URL for your repository.
Create it at the default location (if you are the server administrator)¶
svnadmin create /var/lib/subversion/[<group directory>/]<your project repository>
General Subversion Usage¶
Import project¶
cd ..
svn import -m "Initial import" <your old project directory> <access-scheme>://<server>/[<group directory>/]<your project repository>
<access-scheme>
may be one of http
, https
, svn
, svn+ssh
or file
or even a self defined access scheme of the form svn+<your personal system to access the repository>
.
A project may already exist if you are joining a group. You will be told the project name.
Web Interface¶
ISG D-PHYS does not provide web interfaces for Subversion repositories.
Checkout project¶
svn checkout <access-scheme>://<server>/[<group directory>/]<your project repository> [<your new project directory>]
(Shortcut: co
instead of checkout
)
All steps up to here are necessary to (create and) start working with a Subversion project.
Update Project from Repository¶
cd <your project directory>
svn update
(Shortcut: up
instead of update
)
Show Local Status and Changed Files¶
svn status
(Shortcut: stat
or st
instead of status
)
Show Locally Changed Files only¶
svn status --quiet
(Shortcut: -q
instead of --quiet
)
Typical use: svn st -q
Show Updates available in the Repository¶
svn status --show-updates
(Shortcut: -u
instead of --show-update
)
Typical use: svn st -u
Show Locally Made Changes¶
svn diff
Typical use: svn diff <filename>
Show Changes Between Local Copy and Revision x¶
svn diff -r<x>
Show Changes Between Revisions x and y¶
svn diff -r<x>-<y>
Commit changes to the Repository¶
cd <your project directory>
svn commit -m "Commit message (e.g. what you changed)"
(Shortcut: ci
instead of commit
)
If you changed a file, added or removed one, renamed something, changed properties, create an directory (see all below), etc. you have to commit it to the repository so the change is known there and so others can see it. Otherwise only you can see the changes in your locally checked out copy.
Revert Changes Locally Made to a File¶
svn revert <filename>
Add new file or directory¶
svn add <new file or directory>
If you add a whole directory, all files and subdirectories are added automatically unless they are ignored by Subversion (e.g. Emacs backup files ending with ~
) or you give the -N
option:
svn add -N <new directory>
Remove a File or Directory¶
svn remove <file or directory>
or
svn delete <file or directory>
(Shortcuts: rm
or del
)
Note: the project still keeps informations about a removed file or directory in case you want to check out an old version.
Create a Directory¶
svn mkdir <directory>
In comparision to CVS which cares only about files, Subversion also cares about directories, so if you want to create a new directory in you project, can either create it on the filesystem and then add it (see above) or just let Subversion create and add it at once.
Copy or Move Files¶
svn copy <source> <target>
svn move <source> <target>
(Shortcuts: cp
and mv
or rename
)
More information¶
If you need a quick reference for one Subversion subcommand, e.g. update, use
svn help update
The same counts for svnadmin:
svnadmin help create
For more read the O'Reilly Subversion book, which is available online at its most current version at http://svnbook.red-bean.com/nightly/en/index.html