<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.scott5.org/index.php?action=history&amp;feed=atom&amp;title=Subversion</id>
	<title>Subversion - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.scott5.org/index.php?action=history&amp;feed=atom&amp;title=Subversion"/>
	<link rel="alternate" type="text/html" href="https://wiki.scott5.org/index.php?title=Subversion&amp;action=history"/>
	<updated>2026-04-13T00:30:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.scott5.org/index.php?title=Subversion&amp;diff=470&amp;oldid=prev</id>
		<title>Scott: /* Setting up a svnserve Server */</title>
		<link rel="alternate" type="text/html" href="https://wiki.scott5.org/index.php?title=Subversion&amp;diff=470&amp;oldid=prev"/>
		<updated>2011-02-04T18:41:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Setting up a svnserve Server&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{lowercase title}}&lt;br /&gt;
== References ==&lt;br /&gt;
http://subversion.tigris.org/&lt;br /&gt;
&lt;br /&gt;
http://svnbook.red-bean.com/&lt;br /&gt;
&lt;br /&gt;
Also this book on Safari: &amp;#039;&amp;#039;&amp;#039;Subversion Version Control: Using The Subversion Version Control System in Development Projects&amp;#039;&amp;#039;&amp;#039; By William Nagel&lt;br /&gt;
&lt;br /&gt;
== Setting up Subversion ==&lt;br /&gt;
Create a repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svnadmin create /data/svn&lt;br /&gt;
or&lt;br /&gt;
svnadmin create --fs-type fsfs /path/to/repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Import a directory to the repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/local/pkg&lt;br /&gt;
svn import --message &amp;quot;Initial import&amp;quot; analyze file:///data/svn/analyze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Setting up an svnserve Server ==&lt;br /&gt;
* Create a svn system user &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd -r -c &amp;quot;subversion privilege-separation user&amp;quot; svn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create a repository directory and give to to the svn user: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /u1/svn&lt;br /&gt;
chmod 700 /u1/svn&lt;br /&gt;
svnadmin create /u1/svn/erp&lt;br /&gt;
chown -R svn.svn /u1/svn&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set up repository access control. In &amp;lt;code&amp;gt;repository/conf/svnserve.conf&amp;lt;/code&amp;gt;: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[general]&lt;br /&gt;
anon-access = none&lt;br /&gt;
password-db = passwd&lt;br /&gt;
realm = ERP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create user/password pairs in &amp;lt;code&amp;gt;repository/passwd&amp;lt;/code&amp;gt;: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[users]&lt;br /&gt;
barney = pw4BfranK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Hide passwd file from others: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod go-r passwd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add these lines to &amp;lt;code&amp;gt;/etc/services&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn             3690/tcp                        # Subversion&lt;br /&gt;
svn             3690/udp                        # Subversion&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create file &amp;lt;code&amp;gt;/etc/xinetd.d/svn&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# default: on&lt;br /&gt;
# Subversion server&lt;br /&gt;
&lt;br /&gt;
service svn&lt;br /&gt;
{&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        protocol        = tcp&lt;br /&gt;
        user            = svn&lt;br /&gt;
        wait            = no&lt;br /&gt;
        disable         = no&lt;br /&gt;
        server          = /usr/local/bin/svnserve&lt;br /&gt;
        server_args     = -i -r /u1/svn&lt;br /&gt;
        port            = 3690&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Restart xinetd: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/xinetd restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Verify that svn is listening: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
netstat -anp | grep LISTEN | grep 3690&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Make sure that users can get to port 3690 through the firewall.&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
Show pending transactions for the erp repository which happens to be in the current directory: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svnadmin lstxns erp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find out more about a particular transaction: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svnlook info erp --transaction 8-1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using the svn command ==&lt;br /&gt;
Check out a project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn checkout file:///data/svn/analyze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(This creates a local copy of the &amp;lt;code&amp;gt;analyze&amp;lt;/code&amp;gt; directory)&lt;br /&gt;
&lt;br /&gt;
Check out a project and give the local copy a different name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn checkout file:///data/svn/analyze local_analyze&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check out part of a project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn checkout file:///data/svn/analyze/src/pfile_header&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add a file or directory to the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn add pfileheader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove a file or directory from the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn delete pfileheader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check status of the project:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See logs for a file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn log pfile_header.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the local project from the repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit changes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn commit --message &amp;quot;made a change&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you made changes to a file or directory but want to abandon them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn revert pfile_header.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To revert to an earlier revision:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn revert --revision 34 pfile_header.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To copy/move a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn copy pfile_header.c pfile_header.c.orig&lt;br /&gt;
svn move release_notes.txt change_log.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To undelete a file from an earlier revision:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn copy --revision 34 pfile_header.c pfile_header.c.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get detailed info about a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn info pfile_header.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See changes between current copy and repository copy of a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn diff pfile_header.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See changes between two specific revisions of a file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn diff --revision 3:4 pfile_header.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See who is responsible for each line of a text file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn blame pfile_header.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See what&amp;#039;s in a particular directory of the repository without checking it out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn list file:///data/svn/analyze/src/pfile_header&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read a particular file from the repository without checking it out:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn cat file:///data/svn/analyze/src/pfile_header/pfile_header.c | more&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn list file:///u1/svn/mri&lt;br /&gt;
svn: Unable to open an ra_local session to URL&lt;br /&gt;
svn: Unable to open repository &amp;#039;file:///u1/svn/mri&amp;#039;&lt;br /&gt;
svn: Can&amp;#039;t open file &amp;#039;/u1/svn/mri/format&amp;#039;: Permission denied&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This doesn&amp;#039;t seem to work from the svn server, but it does work from a remote machine.&lt;/div&gt;</summary>
		<author><name>Scott</name></author>
	</entry>
</feed>