Subversion - A Quick Tutorial

I don't know how I managed to survive for years without some sort of version control for my personal projects. First, I used to manually make backup copies of my project directory in case I wanted to revert back or compare revisions. Later, I relied on Eclipse for a very basic version control system. Eclipse stores copies of project files after every save, and lets you compare revisions. Next, I decided to write a script that made backup copies of my projects directory, and archived them according to date/time.

Finally, and given that I have been using CVS to contribute to various Open Source projects for a long time, I saw the light and decided to utilize a version control system for my own projects.

I have been hearing about Subversion for a while, but never had the chance to read more on or try it out. So I decided to experiment with it instead of going directly with CVS. First, it started as "trying something new" but later I realized Subversion has new features that cover many limitations of CVS. I'm no guru of either, but here's what I found:

  • Subversion tracks structure of folders. CVS doesn't have the concept of folders.
  • Subversion has a global revision number for the whole repository. CVS tracks each file individually. A commit that represents one logical change to the project code may change a group of files; in Subversion, this commit will have one revision number instead of separate revision numbers for every changed file in CVS.
  • Subversion commands are very similar to CVS. It's very easy to switch for CVS users. Most of the time it's a matter of replacing cvs with svn.

Again, I don't know all ins and outs of CVS or Subversion, if I'm missing anything, please correct me!

It took me less than an hour to experiment with Subversion, learn it, and import my projects to it. So I decided to write a quick tutorial for those who:

  1. Are already familiar with version control systems (like CVS).
  2. Haven't used any for controlling their local projects.
  3. Would like to try Subversion.

If this is not your case, I point you to "Version Control with Subversion" where I started reading about Subversion.

Read on for the quick tutorial.

Installation

The first step for using Subversion is installing it. This depends on your system. For us, Gentoo users, we can get Subversion going with one command:

# emerge subversion

Subversion has packages for many systems, Linux (Gentoo, Debian, Fedora, ...), Mac OS X, FreeBSD, Windows, ...

Creating The Repository

The first Subversion tool we will use is svnadmin. This tool is for administration tasks, like creating repositories, making backup dumps, and the like. To create a repository, open the command line, change the current directory to where you want to create it, and run svnadmin:

$ cd /home/ayman
$ svnadmin create svn
(I created my repository under my home directory: /home/ayman)

I called my repository svn. You can call it whatever you like. Subversion uses this directory to store information about your projects, like file revisions. You won't need to directly deal with this directory, so I suggest keeping it in a safe place and not tinkering with its contents unless you know what you're doing.

Importing Projects

Now that we have a repository, we will use the svn tool to import and manage projects. To import a project, first create a directory for it in your repository. To do so run svn mkdir:

$ svn mkdir file:///home/ayman/svn/myproj
(Replace /home/ayman/svn/myproj with the actual path to your repository and the new project name)

Subversion will open your default text editor and ask you to enter a log message. Enter an explanation of what you're doing, save, and exit the editor.

Next, it's time to import project files. Change the current directory to the project's directory, and run svn import:

$ cd /home/ayman/[...]/myproj
$ svn import file:///home/ayman/svn/myproj
(This will import all files under /home/ayman/[...]/myproj to the newly-created myproj directory in your repository)

Check out, Modify, Commit

As I said, the repository is stored in the svn directory which you won't deal with. To work on your files, first you need to check a working copy out of the repository. To do so, use svn checkout:

$ svn checkout file:///home/ayman/svn

A new directory named myproj will be created containing your project files. You can work and modify them. Once you're done and you want to store the new revision in your repository, run svn commit in the checked-out myproj directory:

$ svn commit

Subversion will open your default editor asking for a log message. Again, enter an explanation, save, and exit.

Working with Revisions

Now let's make real use of Subversion. While working with revisions, you can:

Check Status

$ svn status [filename]

Compare different Revisions

$ svn compare -r R1:R2 [filename]
(Replace R1 and R2 with actual revision numbers you want to compare)

Revert Local Edits

$ svn revert [filename]

Revert to Previous Revisions

$ svn update -r R
(Replace R with an actual revision number)

[filename] is optional; you can run the previous commands on the current directory if you omit it.

A Final Word

This is a very quick start for using Subversion to control local projects. For extended help on commands, you can always use svn help [command] to get a help message on [command], for example:

svn help import

This will give a lengthy explanation on svn import.

In addition, check out "Version Control with Subversion" for detailed information.

Good luck, and happy subversion'ing!

Tags:
Submitted by Ayman on Tue, 2006/01/10 - 8:58pm

JVA (not verified) | Good for you | Fri, 2006/01/13 - 5:23pm

Version Control, is an essential tool in software engineering, so good for you to switch into this organized programming world, no lost versions anymore, no overwritten version either.
I use CVS, i've heard that SVN is better, but CVS is more popular "as far as i know", and i started with CVS first. I do basic management of my source, no branches and stuff, so i'll stick to CVS.
Anyway, nice tutorial.

nart (not verified) | btw, its also nice to use | Tue, 2006/02/14 - 2:39pm

btw, its also nice to use Trac (http://www.edgewall.com/trac/) with svn for collaborative projects.

john (not verified) | subversion | Fri, 2009/02/13 - 3:35am

Great choice by picking Subversion. I use Subversion myself, and the reason why I like it the most is because Subversion tracks structure of folders. In my opinion, it is the best version control system out there. Good luck with it, Ayman.

----------
supreme buy - keyword elite - seo elite - water4gas - fat loss 4 idiots - rocket spanish

Dandor (not verified) | revision numbers | Thu, 2006/03/16 - 3:56am

It's a nice little tutorial. Just one remark. I think it's a better idea to create repositories on per project basis, this way you will have separate numbering for different projects. Anyway it's a very useful summary.

Pelle (not verified) | Repositories per project? | Fri, 2008/09/12 - 1:05pm

Dear all,

I'm only just getting started with version control and I chose subversion with TortoiseSVN for my needs.
I had thought about doing repositories per project, too, but somehow I feel like this is not intended.
Does anyone know where to start reading about repository-layout and whether it's a good or bad idea to do this on a per-project approach or rather do repositories for a single group of developers or whatever?

Any help on this would be greatly appreciated!

Thanks,
Pelle.

maram (not verified) | the tag <cite></cite> not work | Sun, 2006/08/20 - 3:21pm

I'm use firefox.

Ayman | Fixed, thanks, I installed a | Sun, 2006/08/20 - 3:56pm

Fixed, thanks, I installed a new filter that broke this article.

prasad iyer (not verified) | Very nice article | Sat, 2008/08/30 - 10:04pm

Very well written. I am setting up my repository now.
Thanks for the help

Aamod (not verified) | Thanks | Fri, 2008/10/24 - 4:44pm

Very neatly written and useful for lazy people like me. Using svn after just reading this single page.

Thanks ;-)

Ahmed El Gamil (not verified) | Thanks :) | Mon, 2008/11/17 - 9:17pm

Thanks Ayman for this simple yet powerful tutorial

DJ (not verified) | nice | Wed, 2009/02/11 - 1:28am

Thanks for the simple version of setting this up.

Abdullah (not verified) | Well written totorial. | Mon, 2009/02/16 - 2:22pm

Well written totorial. Thanks

al (not verified) | i have installed Subversion | Tue, 2009/03/03 - 1:31pm

i have installed Subversion in Ubuntu but how do i access it from WinXp.

Matthew Frazier (not verified) | Very good tutorial | Fri, 2009/03/20 - 5:54pm

Thanks for putting this together. A very clean, concise guide to setting up a simple versioning system. I was up and running in under 15 minutes.

Tom (not verified) | re | Fri, 2009/03/27 - 10:10pm

A tutorial walkthrough of Subversion, from creating your first repository to basic branching and merging. *A detailed look at the most important Subversion client commands, as well as properties, user configuration, and integration with a variety of external tools. *A guide to repository administration and organization, including repository security and migration from another version control system. *An in-depth look at automation in Subversion, including using hook scripts, metadata, and the Subversion API, plus example scripts. *Case studies that examine both archetypal and real-world projects and their use of Subversion. *A Subversion command reference for fast access to essential technical information. *Details on Subversion's many advanced features, such as its Apache-integrated WebDAV server and database file storage system. Whether you are an administrator, project manager, or software developer, Subversion Version Control will show you how to realize the full potential of Subversion.

Tom Green

Gold Price Blog
Personal finance advice
Insurance blog

Anonymous (not verified) | Command prompt sucks | Tue, 2009/04/21 - 4:18am

Don't know why anyone would want to use a command prompt and not the context menu (assuming you're using windows) to do all this above. Same with using Visual SVN Server. Command prompt is sooo tedious.

GeekyGrad (not verified) | Great tutorial | Thu, 2009/04/30 - 9:25pm

This is a great piece of work - I linked to it in my article on using Subversion for LaTeX files.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <strike> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <sup> <sub> <h1> <h2> <h3> <b> <i> <u>
  • Lines and paragraphs break automatically.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

More information about formatting options

About

Ayman Hourieh

Computer Science graduate, Open Source enthusiast and Software engineer (Site reliability) at Google.

I'm 25 years old, and live in Dublin, Ireland.

This is my personal blog. The views expressed on these pages are mine alone and not those of my employer.

More

Books

Learning Website Development with Django

Learning Website Development with Django
A beginner's tutorial to building web applications, quickly and cleanly, with the Django application framework.

My first book. Published by Packt Publishing in April 2008.