# Subversion

MediaWiki's SVN uses SSH public key so you don't need a password, so you'll need to supply your ~/.ssh/id_rsa.pub file to the person setting up your commit access (if that files doesn't exist, run ssh-keygen from non-root shell using blank passwd when prompted, see this link for details). Also, you need to set up your auto-props. Note also that the commit's are automatically shown on the #mediawiki IRC channel (see freenode FAQ re registering a nickname etc) so it's good to have that open when working on the MediaWiki code.

See MW:Subversion for details about using MediaWikis SVN. The following examples download the current code-base and an extension:

## Usage

The most important command to know is how to get help;

 svn help svn help checkout # Help on check(ing)out project to CLIENT copy svn help commmit # Help on commit(ting) changes to SERVER 

To obtain a log of the changes made in a svn project;

 svn log -v http://[PATH TO SERVER SVN PROJECT] 

Or to get changes between a certain date range in a local repo;

 svn log -r {2012-02-10}:{2012-02-15} 

To create a new repository on the server ready for importing a directory of files;

 cd /tmp mkdir SERVER svnadmin create /tmp/SERVER/newrepos 

This creates a concise database directory for the new repository on the SERVER in the directory called /tmp/SERVER;

 ls -l /tmp/SERVER/newrepos total 16 -rw-r--r-- 1 User wheel 379 Apr 3 13:58 README.txt drwxr-xr-x 4 User wheel 136 Apr 3 13:58 conf drwxr-xr-x 2 User wheel 68 Apr 3 13:58 dav drwxr-xr-x 10 User wheel 340 Apr 3 13:58 db -r--r--r-- 1 User wheel 2 Apr 3 13:58 format drwxr-xr-x 11 User wheel 374 Apr 3 13:58 hooks drwxr-xr-x 4 User wheel 136 Apr 3 13:58 locks 

Create an example directory for upload;

 cd /tmp mkdir MYTREE echo '#!/usr/bin/perl -w\nprint "hello world";' > /tmp/MYTREE/helloWorld.pl svn import /tmp/MYTREE file:///tmp/SERVER/newrepos/some/project 

Listing the contents in the repository directory path;

 svn list file:///tmp/SERVER/newrepos/some/project 

To make a local copy you need to use the checkout command. This creates a new directory (default called newrepos) which is a local copy of newrepos.

 mkdir CLIENT cd CLIENT svn co file:///tmp/SERVER/newrepos/some/project/ # fetches project/test.pl svn co file:///tmp/SERVER/newrepos/some/ # fetches some/project/test.pl rm -rf /tmp/CLIENT svn co file:///tmp/SERVER/newrepos/some/project/ /tmp/CLIENT # Creates CLIENT dir 

Note: The directory the svn command is run in determines where the local checkout directories and files will end up.

Now that you have created a local copy all work should be conducted within it. There is a hidden directory called .svn which contains all the information required for the svn framework;

 cd /tmp/CLIENT # Work in the local copy of svn 

To update a file on your CLIENT directory;

 cd /tmp/CLIENT svn update # "." is updated cd /tmp svn update /tmp/CLIENT # Specifying path 

To add a new file to the local svn copy, first make a new file within the directory structure;

 cd /tmp/CLIENT echo '#!/usr/bin/perl -w\nprint qq(hello world!);' > /tmp/CLIENT/helloWorld2.pl svn add helloWorld2.pl 

The status command will identify differences between the CLIENT copy and the SERVER copy of the repoistory;

 svn status /tmp/CLIENT 

The following list provides the details of svn status output;

 L abc.c # svn has a lock in its .svn directory for abc.c M bar.c # the content in bar.c has local modifications M baz.c # baz.c has property but no content modifications X 3rd_party # this dir is part of an externals definition ? foo.o # svn doesn't manage foo.o ! some_dir # svn manages this, but it's either missing or incomplete ~ qux # versioned as file/dir/link, but type has changed I .screenrc # svn doesn't manage this, and is configured to ignore it A + moved_dir # added with history of where it came from M + moved_dir/README # added with history and has local modifications D stuff/fish.c # this file is scheduled for deletion A stuff/loot/bloo.h # this file is scheduled for addition C stuff/loot/lump.c # this file has conflicts from an update R xyz.c # this file is scheduled for replacement S stuff/squawk # this file or dir has been switched to a branch 

### Problems

When attempting to import the /var/www structure into the /var/svn/www repository it bailed after coming across a filename containing special characters with the following fatal error:

 svn: Can't convert string from native encoding to 'UTF-8': svn: A?\195?\164o?\195?\188.gif