meta data for this page
20.8.2012: Initial version
21.8.2012: Documented rest of the commands and added some file manipulation command documentation.
22.8.2012: Corrections to authentication and installation. Added “references”.
22.8.2012: Updates to
Subversion version control
Subversion is a full-featured software version and revision control system. It is a centralized system (unlike Git that is a distributed version control system) that allows for multiple people to collaborate on a single project. Subversion makes it possible to merge the contributions of multiple persons into one single project and provides means for resolving possible conflicts between files. It keeps the different versions of the project (based on revision number that is increased with each commit) and provides the most recent copy (or a specific revision if requested) of files when a person updates the local copy (or does a full checkout).
A full book about Subversion usage is available at http://svnbook.red-bean.com/.
Here are some instructions for installing Subversion client tools. Currently instructions are for Debian based Linux distributions.
Linux (Debian based)
The following tutorial explains the usage of commandline
svn command that in Linux comes in
subversion package, e.g. in Debian based systems, do (as root)
apt-get install subversion libsvn1
For graphical interface that integrates into
thunar) file manager there is RabbitVCS, an “easier” version control system that supports Git in addition to SVN. Full installation in Debian based systems can be done with (as root)
apt-get install rabbitvcs-core rabbitvcs-gedit
apt-get install rabbitvcs-nautilus
Thunar extension (in Ubuntu, does not exist in Debian yet)
apt-get install rabbitvcs-thunar
Subversion user username and password combination for user identification and authorization.
When a repository is contacted for the first time on a computer a password will be asked and is cached for future use.
If the login name of the current computer is different then the username will have to be passed as a argument, e.g., to checkout command
svn checkout https://path.to/repository/project --username myusername
Some installations of subversion do store the password in plaintext. In order to change this to use gnome-keyring or kwallet (KDE), change the line in
password-stores = gnome-keyring,kwallet
Subversion uses either one that is available (if you use gnome you can just use gnome-keyring only). Follow the instructions if you haven't used it before.
The most useful commands:
svn checkout <url> <path> svn update <path> svn add <path> svn status <path> svn commit <path> svn diff svn revert <path> svn log svn help <command>
- <url> = repository url
- <path> = local file system path
- <command> = svn command without parameters
Note that these are the long names for the commands, most of them have an abbreviated versions available. These can be seen by using command:
Get project files from repository (CHECKOUT)
svn checkout https://path.to/repository/codeproject /home/user/projects/
retrieves the newest version of the project in repository
https://path.to/repository/ into current folder if the latter argument is not given. If the path is provided then the retrieved project is put into that folder.
In this example the checked out project
codeproject and its contents including subfolders would be located under
/home/user/projects/codeproject. If the
codeproject would contain a file called
code.c and a subfolder
doc that contains a
README file, after
checkout the folder would look like (using
. ./codeproject ./codeproject/code.c ./codeproject/doc ./codeproject/doc/README
Do this when you are getting an existing project out of repository for viewing or editing.
To view all other options for this command, type
svn help checkout
Get newest version of contents of a project (UPDATE)
Once you have checked out a project from the repository you can check for newest version of the project using command
svn update /home/user/projects/codeproject
that will request newest files from the repository. If the path is not given the project in the current folder will be updated. E.g. running
/home/user/projects/codeproject would update the files in the project
This does not overwrite changes you have made to files in this project unless the elsewhere committed changes in the remote copy affect the file you have modified in the project. This situation would result in a conflict between the files. Now, conflict resolution might be tricky and when there is a conflict the local copy cannot be committed to repository. While doing the update the SVN will ask from the user what to do with the conflict. For more information about resolving conflicts see Resolve Any Conflicts chapter in Version Control with Subversion. Or if the changes are little revert the file into the state it was in the current revision.
Insert files or folders into project in the repository (ADD)
svn add /home/user/projects/codeproject/header.h
you can add a file (or folders) under the version control of the project
codeproject. This means that the files added are to be scheduled to be committed into the project in the next commit. I.e. this command will not make the changes into the remote copy, it just adds the files/folders under version control.
You can also add multiple files simultaneously, e.g. run in
svn add code2.c data/ data/datafile.dat
and the files
data/datafile.dat and folder
data will be tracked by SVN.
To create a folder into project you can also use command
svn mkdir directory
while inside the project folder (otherwise give the full path). Note that this command creates the project and adds it into version control. Other file manipulation commands that operate in similar fashion:
# Copy from <srcpath> to <destpath> svn cp <srcpath> <destpath> # Remove file/directory (the path is scheduled to be deleted in the next commit) svn rm <path> # Move <srcpath> to <destpath> svn mv <srcpath> <destpath>
Check what files are changed in the project (STATUS)
svn status /home/user/projects/codeproject
will show the status differences between local and remote copy. It is useful to check this before commit so the commit messages can be made more informative by telling what has been changed and where.
Some common codes:
- A - Added
- C - Conflicted
- D - Deleted
- M - Modified
- ? - Item is not under version control
- ! - Item is missing (deleted with external command)
Make changes to remote copy (COMMIT)
When you are ready to make changes into the project use the command
svn commit /home/user/projects/codeproject
which will make the changes but first it will prompt for a commit message by opening up the default terminal editor set in the system. To add the commit message from command line, use additional parameter
-m “message”, e.g. run in
/home/user/projects/codeproject following command
svn commit -m "My first commit"
that makes the changes to the project and creates a new commit with increased commit number containing the commit text “My first commit”.
Check the differences between the working copy and the remote copy (DIFF)
When you have made some changes to the files of the project you can use command
to see all changes in the project. Or if a path to, e.g. a file is given the changes made to that file are presented. The removal of a line is marked with
- sign and addition with
Undo the changes in the local copy (REVERT)
svn revert <path>
would revert the given file into original state in the current revision of the project.
-R handle (recursive) with the command (note the dot - current path!)
svn revert . -R
would undo the local edits to the project if ran in the project folder
Project history (LOG)
To view previous commits made to the project you can use command
# View all commit messages svn log # View commits made to certain file svn log <path>
Help me out with this command (HELP)
Use help command to get further information about specific command, use e.g.
svn help checkout
to get details about the
checkout command including the possible parameters that can be given.
This tutorial was written using a SVN guide in Finnish (© Lauri Kyttälä & Uolevi Nikula) for course ct60a0210 Käytännön Ohjelmointi, help pages of the subversion command line tool and the Version Control with Subversion online book.
© Jussi Laakkonen, proofreading by Tommi Kähkönen