From charlesreid1

Line 31: Line 31:
= SVN Guide =
= SVN Guide =


{{Stub|section}}
==Updating==
 
update working copy to be up-to-date with repository:
 
<source lang="bash">
$ svn update
A = added
D = deleted
U = updated
C = conflicted
G = merged
</source>
 
==Making changes to a working copy==
 
Adding file/directory/symbolic link:
 
<pre>
$ svn add foo
</pre>
 
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:
 
<pre>
$ svn delete foo
</pre>
 
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):
 
<pre>
$ svn copy old new
</pre>
 
To move a file from location1 to location2:
 
<pre>
$ svn move location1 location2
</pre>
 
This is the same as running <code>svn copy location1 location2; svn delete location1</code>
 
To make a new directory:
 
<pre>
$ svn mkdir foobar
</pre>
 
This is the same as running <code>mkdir foobar; svn add foobar</code>
 
<code>foobar</code> is a new directory that is created and scheduled for addition
 
==Submitting changes==
 
First, you can check what files you have changed:
 
<pre>
$ svn status
</pre>
 
Next, you can check exactly what changes you have made:
 
<pre>
$ svn diff
</pre>
 
or you can diff a particular file:
 
<pre>
$ svn diff file
</pre>
 
(or, to pipe into an external file and review changes there:)
 
<pre>
$ svn diff > diff_file
</pre>
 
If you are happy with your changes, then commit your changes:
 
<pre>
$ svn commit -m "your log message here"
</pre>
 
Alternatively, if your <code>$EDITOR</code> environmental variable is set, you can run
 
<pre>
$ svn commit
</pre>
 
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:
 
<pre>
$ svn commit file1 file2 file3 -m "your log message here"
</pre>
 
==Looking at differences==
 
The command to see the differences between your working copy and the repository copy is
 
<pre>
$ svn diff
</pre>
 
To look at differences between different revisions:
 
Example: Compare revision 3000 to revision 3500 using “@” syntax:
 
<source lang="bash">
$ 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)
...
</source>
 
Example: Compare revision 3000 to revision 3500 using range notation (you only pass the one URL in this case):
 
<source lang="bash">
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS  (revision 3000)
+++ COMMITTERS  (revision 3500)
</source>
 
Example: Compare revision 3000 to revision 3500 of all files in trunk using range notation:
 
<pre>
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
</pre>
 
==Working copy information==
 
You can determine the version number of your working copy by running:
 
<pre>
$ svnversion
</pre>
 
or,
 
<pre>
$ svnversion . svn://hostname/project
</pre>
 
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:
 
<pre>
$ svn info TARGET
</pre>
 
(TARGET = working copy or URL)
 
To get info about a specific revision:
 
<pre>
$ svn info TARGET -r
</pre>
 
The info command will give you revision number, revision author, revision date and time, and svn server location.
 
==Looking at the log==
 
Usage:
 
<pre>
$ svn help log
</pre>
 
To look at log message related to changes in the current directory (.), use:
 
<pre>
$ svn log
</pre>
 
To look at the log messages for changes to a particular folder or file:
 
<pre>
$ svn log foobar.cc
</pre>
 
To look at the log for a particular revision of a file, use -r:
 
<pre>
$ svn log foobar.cc -r 5
</pre>
 
To look at the latest revision, use:
 
<pre>
$ svn log -rHEAD
</pre>
 
Or, look at a series of revisions:
 
<pre>
$ svn log -r <min>:<max>
</pre>
 
To print all directories affected by the revision displayed, use -v
 
<pre>
$ svn log foobar -v
</pre>
 
(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 <code>-q</code> flag:
 
<pre>
$ svn log foobar -q
</pre>
 
combine to get what you want... e.g. to see the files that were affected by a particular revision:
 
<pre>
svn log -r 2 -v
</pre>
 
 
==Changing commit properties==
 
You can change properties of svn files and commits by using
 
<pre>
$ svn propset
</pre>
 
Here are some examples:
 
Set the mime type on a file:
 
<pre>
$ svn propset svn:mime-type image/jpeg foo.jpg
property 'svn:mime-type' set on 'foo.jpg'
</pre>
 
On a UNIX system, if you want a file to have the executable permission set:
 
<pre>
$ svn propset svn:executable ON somescript
property 'svn:executable' set on 'somescript'
</pre>
 
Perhaps you have an internal policy to set certain properties like "owner" for the benefit of repository users:
 
<pre>
$ svn propset owner charles foo.cc
property 'owner' set on 'foo.c'
</pre>
 
If you made a mistake in a log message for a particular revision and want to change it, use the <code>--revprop</code> flag and set <code>svn:log</code> to the new log message:
 
<pre>
$ svn propset --revprop -r 25 svn:log "This is the new log message."
property 'svn:log' set on repository revision '25'
</pre>
 
Or, if you don't have a working copy, you can provide a URL:
 
<pre>
$ svn propset --revprop -r 26 svn:log "This is the new log message." svn://hostname/repository
property 'svn:log' set on repository revision '26'
</pre>
 
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:
 
<pre>
$ svn propset owner-pic -F charles.jpg foobar.cc
property 'owner-pic' set on 'foobar.cc'
</pre>


= SVN Server =
= SVN Server =

Revision as of 21:11, 20 May 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

Stump.gif This section is a stub.

A team of expertly-trained librarian ninjas has been dispatched to research this topic, finish this section, and assassinate all eyewitnesses who contradict their account.

They should be done pretty soon.

Template:Stub

Category:Stubs

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