Basic subversion commands
There is a very good documentation for subversion available, the svn book:
There are also several quick references are around, for example:
http://www.digilife.be/quickreferences/QRC/Subversion%20Quick%20Reference%20Card.pdf
Short command list
Always keep in mind that there are two different things: the repository (usually residing on a server) and your local copy ("checkout").
The commands usually take some arguments; a path, a revision number, a username. Take a look into the detailed documentation for this.
A rule of thumb is: whenever you change something in the repository (server-side), then add a comment with the -m flag for on-line comments or the -F $FILENAME flag, which appends the file of the appropriate name.
Commands that change nothing
svn info -- tells you the URL of the repository and its root directory, as well as the revision number of your checkout
$ svn info Path: . URL: https://svnsrv.desy.de/desy/marlintpc/trunk Repository Root: https://svnsrv.desy.de/desy/marlintpc Repository UUID: 41c05227-d42d-0410-9319-85d422a44614 Revision: 2288 Node Kind: directory Schedule: normal Last Changed Author: rosem Last Changed Rev: 2282 Last Changed Date: 2010-10-11 11:47:09 +0200 (Mon, 11 Oct 2010)
svn status -- compares your local copy to the version at the repository (check svn info for which repository path!) and and yields a list of files and attributes that have changed or are unknown
$ svn status ? cdb.log ? doc/html
svn log -- gives you the complete log file, which are the log messages that are sent along with commits (you might want to pipe it to less/more)
$ svn log | less ------------------------------------------------------------------------ r2282 | rosem | 2010-10-11 11:47:09 +0200 (Mon, 11 Oct 2010) | 1 line My wrong, somehow the root CMakeLists.txt was mixed up with the one from the reco dir ------------------------------------------------------------------------ r2280 | rosem | 2010-10-08 17:29:18 +0200 (Fri, 08 Oct 2010) | 1 line Reverting an involuntary change -- sorry from my part. ...
Commands that change your local copy
svn checkout -- actually the command that creates your local copy
$ svn co https://svnsrv.desy.de/desy/marlintpc/trunk A trunk/analysis/src/PadResponseProcessor.cc A trunk/analysis/src/TimePixOccupancyProcessor.cc [...] A trunk/examples/reconstruction_straight_tracks/README A trunk/examples/reconstruction_straight_tracks/dumpPadCentres.xml U trunk Checked out revision 2291.
svn update -- updates your local copy to the latest revision of the repository
$ svn update At revision 2291.
svn add/svn remove -- adds or removes a file to version control, needs a commit afterwards
Commands that change the repository
svn commit -- commits all changes
svn copy -- make a shallow (=cheap) copy of an existing path
A usual session
Usually you will have your own working branch in the repository (how to create it is described elsewhere: HowToDevelopMarlinTPC).
First you will checkout your branch (I choose the kerberos authentication for simplicity, the other methods work the same way, but the repository paths are consistently different):
$ svn co https://svnsrv.desy.de/desy/marlintpc/branches/rosem [...]
Then you will do your modifications. The status command (invoked from the local base directory) shows which files have changed:
$ svn status M reconstruction/include/PulseFinderProcessor.h M reconstruction/src/PulseFinderProcessor.cc
Since you made sure that everything is correct (or just want to save your work for the day), you commit your changes, commenting on it for later reference:
$ svn commit -m"updating my stuff" Sending reconstruction/include/PulseFinderProcessor.h Sending reconstruction/src/PulseFinderProcessor.cc Transmitting file data .. Committed revision 2010.