Difference between revisions of "Subversion"

From Organic Design wiki
(link aliases)
(typos etc)
Line 2: Line 2:
 
*http://svn.peerix.org/peerix
 
*http://svn.peerix.org/peerix
 
*http://svn.organicdesign.co.nz/peerix
 
*http://svn.organicdesign.co.nz/peerix
 +
=Overview=
 +
The typical work cycle looks like this:
  
 +
;Update your working copy
  
;Commands
+
svn update
:<tt>svn co url</tt>
+
 
Checkout, creates dir of name ''url''
+
;Make changes
:<tt>svn ci -m comment</tt>
+
 
Checkin - applies to the svn-structure that cwd is in
+
svn add
 +
svn delete
 +
svn copy
 +
svn move
 +
 
 +
;Examine your changes
 +
 
 +
svn status
 +
svn diff
 +
 
 +
;Possibly undo some changes
 +
 
 +
svn revert
 +
 
 +
;Resolve Conflicts (Merge Others' Changes)
 +
 
 +
svn update
 +
svn resolved
 +
 
 +
;Commit your changes
 +
svn commit
  
 
=Usage=
 
=Usage=
Line 21: Line 44:
 
  svnadmin create /tmp/SERVER/newrepos
 
  svnadmin create /tmp/SERVER/newrepos
  
This creates a concise directory for the new repository on the SERVER;
+
This creates a concise database directory for the new repository on the SERVER in the directory called /tmp/SERVER;
 
<pre>
 
<pre>
 
ls -l /tmp/SERVER/newrepos
 
ls -l /tmp/SERVER/newrepos
Line 39: Line 62:
 
  svn import /tmp/MYTREE file:///tmp/SERVER/newrepos/some/project
 
  svn import /tmp/MYTREE file:///tmp/SERVER/newrepos/some/project
  
Listing the contents in the repository;
+
Listing the contents in the repository directory path;
 
  svn list file:///tmp/SERVER/newrepos/some/project
 
  svn list file:///tmp/SERVER/newrepos/some/project
  
Line 55: Line 78:
 
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;
 
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 lcoal copy of svn
+
  cd /tmp/CLIENT # Work in the local copy of svn
  
 
To update a file on your CLIENT directory;
 
To update a file on your CLIENT directory;
Line 61: Line 84:
 
  svn update # "." is updated  
 
  svn update # "." is updated  
 
  cd /tmp
 
  cd /tmp
  svn update /tmp/CLIENT # Sepecifying path
+
  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;
 
To add a new file to the local svn copy, first make a new file within the directory structure;
Line 94: Line 117:
 
Cleaning up directories in ''/tmp'';
 
Cleaning up directories in ''/tmp'';
 
  rm -rf /tmp/SERVER /tmp/CLIENT /tmp/MYTREE
 
  rm -rf /tmp/SERVER /tmp/CLIENT /tmp/MYTREE
 
  
 
=External Links=
 
=External Links=
Line 102: Line 124:
 
*[http://centerstageproject.com/wiki/index.php/SVN_Tutorial Centrestage tutorial]
 
*[http://centerstageproject.com/wiki/index.php/SVN_Tutorial Centrestage tutorial]
 
*[http://wiki.fhcrc.org/bioc/SvnHowTo BioConductor SVN tutorial]
 
*[http://wiki.fhcrc.org/bioc/SvnHowTo BioConductor SVN tutorial]
 +
*[http://svnbook.red-bean.com/nightly/en/index.html Subversion book]
 +
**[http://svnbook.red-bean.com/nightly/en/svn.intro.html Subversion Quick-Start Guide]

Revision as of 20:46, 16 April 2007

Overview

The typical work cycle looks like this:

Update your working copy
svn update
Make changes
svn add
svn delete
svn copy
svn move
Examine your changes
svn status
svn diff
Possibly undo some changes
svn revert
Resolve Conflicts (Merge Others' Changes)
svn update
svn resolved
Commit your changes
svn commit

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 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
 

To upload the CLIENT copy changes to the SERVER copy use the commit command;

svn commit /tmp/CLIENT
 

Cleaning up directories in /tmp;

rm -rf /tmp/SERVER /tmp/CLIENT /tmp/MYTREE

External Links