Subversion: Difference between revisions
From charlesreid1
No edit summary |
|||
| Line 332: | Line 332: | ||
==Setting up a new SVN 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 <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
| GNU/Linux/Unix the concrete that makes the foundations of the internet.
Compiling Software · Upgrading Software Category:Build Tools · Make · Cmake · Gdb Bash Bash · Bash/Quick (Quick Reference) · Bash Math Text Editors Text Manipulation Command Line Utilities Aptitude · Diff · Make · Patch · Subversion · Xargs Security SSH (Secure Shell) · Gpg (Gnu Privacy Guard) · Category:Security Networking Linux/SSH · Linux/Networking · Linux/File Server Web Servers
|