From charlesreid1

No edit summary
Line 332: Line 332:
==Setting up a new SVN server==
==Setting up a new SVN server==


{{Stub|section}}
Any computer can be run as an SVN server. You can run the SVN server locally, on a local network, or on the internet.
 
To run a computer as an SVN server, you need to first install SVN, then open port 3690 on the machine that will be the SVN server, in case there is any firewall on that machine. Port 3690 is the port that is used by the SVN server and clients to communicate.
 
Once you do this, you can create a repository using the <code>svnadmin</code> command, as described below.


==Creating a new repository ==
==Creating a new repository ==

Revision as of 16:02, 22 October 2011

Installation

Configuration

I configured subversion version 1.5.2 with the following configure line:

#!/bin/sh
# 
# run this configure script
# make
# make install

./configure \
 --prefix=/path/to/subversion \
 --with-ssl \
 --without-berkeley-db \
 --enable-swig-bindings=no \
 --with-apxs=/path/to/apache/bin/apxs \
 --with-neon=/usr/local \
 --with-apr=/path/to/apache \
 --with-apr-util=/path/to/apache

I have to point subversion to apache so that it can handle subversion repository addresses that begin with http:// or https:// (as opposed to the default svn://, which works fine out of the box).

Dependencies

To install subversion with the above configure line, I had to install Apache, and I also had to install Neon, which is an HTTP and WebDAV client software. It is required for the http:// and https:// repository addresses. It's available from http://www.webdav.org/neon/. I install it to /usr/local/, and without any particularly special configure line (just ./configure).

SVN Guide

Updating

update working copy to be up-to-date with repository:

$ svn update
A = added
D = deleted
U = updated
C = conflicted
G = merged

Making changes to a working copy

Adding file/directory/symbolic link:

$ svn add foo

If foo is a directory, it will be added recursively.

To only add foo itself, use --non-recursive (-N) argument

Deleting file, directory, or symbolic link:

$ svn delete foo

If foo is a directory, it is not immediately deleted, but is SCHEDULED for deletion.

When you commit changes, it will be deleted.

Copy a new item (new) from an old item (old):

$ svn copy old new

To move a file from location1 to location2:

$ svn move location1 location2

This is the same as running svn copy location1 location2; svn delete location1

To make a new directory:

$ svn mkdir foobar

This is the same as running mkdir foobar; svn add foobar

foobar is a new directory that is created and scheduled for addition

Submitting changes

First, you can check what files you have changed:

$ svn status

Next, you can check exactly what changes you have made:

$ svn diff

or you can diff a particular file:

$ svn diff file

(or, to pipe into an external file and review changes there:)

$ svn diff > diff_file

If you are happy with your changes, then commit your changes:

$ svn commit -m "your log message here"

Alternatively, if your $EDITOR environmental variable is set, you can run

$ svn commit 

and the editor will open, and you can enter your log message there (good for complex log messages).

If you want to commit a particular file, just specify that file when you run the commit command:

$ svn commit file1 file2 file3 -m "your log message here"

Looking at differences

The command to see the differences between your working copy and the repository copy is

$ svn diff

To look at differences between different revisions:

Example: Compare revision 3000 to revision 3500 using “@” syntax:

$ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500
Index: COMMITTERS
===================================================================
--- COMMITTERS  (revision 3000)
+++ COMMITTERS  (revision 3500)
...

Example: Compare revision 3000 to revision 3500 using range notation (you only pass the one URL in this case):

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS  (revision 3000)
+++ COMMITTERS  (revision 3500)

Example: Compare revision 3000 to revision 3500 of all files in trunk using range notation:

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk

Working copy information

You can determine the version number of your working copy by running:

$ svnversion

or,

$ svnversion . svn://hostname/project

Trailing letters mean:

M - modified working copy (there have been modifications made from the latest revision of svn://hostname/project)

S - switched working copy (meaning the repository server has been switched)

You can get more information about your local working copy by running:

$ svn info TARGET

(TARGET = working copy or URL)

To get info about a specific revision:

$ svn info TARGET -r

The info command will give you revision number, revision author, revision date and time, and svn server location.

Looking at the log

Usage:

$ svn help log

To look at log message related to changes in the current directory (.), use:

$ svn log

To look at the log messages for changes to a particular folder or file:

$ svn log foobar.cc

To look at the log for a particular revision of a file, use -r:

$ svn log foobar.cc -r 5

To look at the latest revision, use:

$ svn log -rHEAD

Or, look at a series of revisions:

$ svn log -r <min>:<max>

To print all directories affected by the revision displayed, use -v

$ svn log foobar -v

(this may be a lot of output, since it's going all the way back to the initial check-in)

To supress the log messages, and just show info on when an update occurred, use the -q flag:

$ svn log foobar -q

combine to get what you want... e.g. to see the files that were affected by a particular revision:

svn log -r 2 -v


Changing commit properties

You can change properties of svn files and commits by using

$ svn propset

Here are some examples:

Set the mime type on a file:

$ svn propset svn:mime-type image/jpeg foo.jpg
property 'svn:mime-type' set on 'foo.jpg'

On a UNIX system, if you want a file to have the executable permission set:

$ svn propset svn:executable ON somescript
property 'svn:executable' set on 'somescript'

Perhaps you have an internal policy to set certain properties like "owner" for the benefit of repository users:

$ svn propset owner charles foo.cc
property 'owner' set on 'foo.c'

If you made a mistake in a log message for a particular revision and want to change it, use the --revprop flag and set svn:log to the new log message:

$ svn propset --revprop -r 25 svn:log "This is the new log message."
property 'svn:log' set on repository revision '25'

Or, if you don't have a working copy, you can provide a URL:

$ svn propset --revprop -r 26 svn:log "This is the new log message." svn://hostname/repository 
property 'svn:log' set on repository revision '26'

Lastly, you can tell propset to take its input from a file. You could even use this to set the contents of a property to something binary:

$ svn propset owner-pic -F charles.jpg foobar.cc
property 'owner-pic' set on 'foobar.cc'

SVN Server

Some syntax:

Subversion is run as a server or as a client. Users (clients) check out files from a server.

A subversion server can have many different repositories, or it can have just one.

The following guide covers how to set up a subversion server, and how to create new repositories in the server.

Setting up a new SVN server

Any computer can be run as an SVN server. You can run the SVN server locally, on a local network, or on the internet.

To run a computer as an SVN server, you need to first install SVN, then open port 3690 on the machine that will be the SVN server, in case there is any firewall on that machine. Port 3690 is the port that is used by the SVN server and clients to communicate.

Once you do this, you can create a repository using the svnadmin command, as described below.

Creating a new repository

Step 1: crate a place for the subversion repository

$ svnadmin create /path/to/repositories/repository_name

Step 2: import files into the repository:

$ svn import /location/of/files file:///path/to/repositories/repository_name -m "Initial import"

(You must use file:///path/ syntax, rather than an absolute path).

Step 3: check out code from the new repository

$ svn checkout svn://hostname/repository_name working_copy --username=user