SVN Cheat Sheet

An exhaustive SVN cheat sheet found here :

* Create a repository
– use the database backend
svnadmin create ~/svn_repos/Eccos
– use the filesystem backend
svnadmin create –fs-type=fsfs PATH

* Import a revision
svn import -m “Initial import” Eccos file:///home/reichr/svn_repos/Eccos/trunk

* Check out a revision
svn co file:///home/reichr/svn_repos/Eccos/trunk Eccos

* Dump a repository
svnadmin dump /home/reichr/svn_repos/Eccos | gzip -9 > dump.gz
svnadmin dump /home/reichr/svn_repos/Eccos | gzip -9 > `date “+Eccosdump%Y-%m-%d_%H:%M:%S.gz”`

* Load contents of a dump into a repository
gunzip -c dump.gz | svnadmin load /home/reichr/svn_repos/e

* Import from an existing directory, no need to check it out again
It should work, but you could also check it out right into /etc. Something
like this:

$ svnadmin create /var/svnrepos/admin
$ svn mkdir -m “initial setup” file:///var/svnrepos/admin/trunk
c:> svn mkdir -m “initial setup” file:///c:/fhs/svn_repos/trunk
$ cd /etc
$ svn co file:///var/svnrepos/admin/trunk .
$ svn add passwd group
$ svn commit -m “start loading it in”

I tested the ‘svn co’ into ‘.’ just now. Works great.

* svn propset
svn propset svn:keywords “LastChangedDate LastChangedRevision Id Author” weather.txt
svn propset svn:keywords “LastChangedDate LastChangedRevision Id” slides.tex

* Before an update you could use the following to get the log messages of the changes:
svn log -rBASE:HEAD

* Upgrade to a new subversion version
$ mv repos repos.tmp
$ svnadmin create repos
$ svnadmin-old dump repos.tmp | svnadmin load repos
$ # copy over any hook scripts and stuff from repos.tmp to repos

* Upgrade my repositories at work
$ mv Eccos Eccos-old
$ svnadmin create Eccos
$ gunzip -c dumps/Eccosdump2003-11-11_10:08:54.gz | svnadmin load Eccos

* Checkout from a repository over ssh
svn co svn+ssh://felix/home/reichr/svn_repos/XSteveData/trunk data

* Change the path of the repository for a working copy
svn switch –relocate file:///original/path/to/repos file:///new/path

* Put system configuration in a subversion repository
– create the repository /home/reichr/svn_repos/WaldiConfig
svnadmin create WaldiConfig
– Import an empty directory
cd to an empty directory
svn import -m “Initial import” . file:///home/reichr/svn_repos/WaldiConfig/trunk
– Check it out from Waldi (user reichr)
svn co svn+ssh://felix/home/reichr/svn_repos/WaldiConfig/trunk WaldiConfig
– Put files in the repository (as root)
mv /etc/fstab /home/reichr/WaldiConfig/etc
ln -s /home/reichr/WaldiConfig/etc/fstab /etc/fstab

* Network a repository via svn+ssh:
– create the repository on the repository host:
svnadmin create rp1 — this is located at /home/svtest/rp1
– Import data to the repository:
svn import -m”Initial import” svn+ssh://svtest@host/rp1/trunk
– Checkout the project:
svn co svn+ssh://svtest@host/home/svtest/rp1/trunk p1

* Warning:
Putting the repository on a network filesystem my be a bad idea,
because the repository may get corrupted!
It is better to put it on a local filesystem.

* Merge from a branch back to the trunk

* Generate a patch to undo some local changes and redo them later
> What usually happens to me is that I’ve changed N files in M different
> directories distributed all over the filesystem, and I want to check in
> N-1 of them.

Yeah, I have to do this all the time. But I can eye a potentially
complex command-line pretty well, so if I need to commit all but one
file, I do this:

% svn diff path/to/file_not_committing > /tmp/patch.txt
% svn revert path/to/file_not_committing
% svn ci -m “committing all the stuff i wanted to”
% patch -p0 < /tmp/patch.txt Revert is your friend. Learn it, use it, looooooooooove it. * Revert to a previous version svn co project
svn ci foo.c (commits to r348)

svn merge -r348:347 foo.c
svn ci foo.c (commits 349)

note the ordering of the revision numbers in the merge command. what this
really says is “make a diff between revision 348 and 347, and apply it
immediately to foo.c”

if you are trying to revert a directory tree with moves or deletes in it, and
are getting arcane errors, try the –ignore-ancestry flag.

* Edit the commit/log messages after the commit
Read chapter 7, regarding unversioned properties attached to revisions.
You want to change the svn:log property:
$ svn propedit -r N –revprop svn:log URL

* Svn repository via apache2
– manage the htpasswd file:
– a sample cgi script to alter users passwords via Apache::Htpasswd:
– A full featured utility to add/change users via commandline or cgi:

* Use svn:mime-type for nicer www browsing of a repository
> When browsing your repository, if you click on a filename, you see the
> contents of the file (assuming it’s a text file) formatted as if with a

 tag.  So, if the file happens to be an HTML file, you essentially see
> the source HTML code. Which, in most cases, is perfectly correct.
> However, there are times when it would be nice to see the _formatted_ HTML
> instead. Is there a way to do this, other than the cumbersome Save Page As
> / Open File process within the browser?

If you set the svn:mime-type property on that file to ‘text/html’ and
commit, your browser should see subsequent revisions of that file as
formatted HTML.

* Versionize symlinks, unix permissions and ownership, from Steve Wray
(search on the svn mailing list or in my mail-boxes)

* track svn trunks/branches with all history in arch
– svn-arch-mirror
Category: svn-arch-mirror


Leave a Reply

Your email address will not be published. Required fields are marked *