Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Perl Emacs Lisp Other

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


This is the README file for svk 0.08 release, a decentralized version
control system.

*NOTE* The release is aimed to be a working prototype, all things are
subject to change, including project name, binary name, perl module
namespaces, depot spec, etc. Since the underlying local repository is
still a subversion repository, you are free to switch back and forth
between svn and svk, and you might want to use svn for some of the
operations that svk does not yet implement.

* About

Subversion (svn) aims to take over the CVS user base, while svk
attempts to take over the others - including people who already
switched to other scm, and people who had not started using scm. It is
written in Perl and is using subversion's underlying filesystem.

A quick glance about svk for people already familiar with Subversion:

(also take a look at the tutorial on

o the depot spec is like : /[depotname]/<path>
  ~/.svk/config holds a depotmap hash for mapping depotname (which
  could be empty) to a path containing a subversion repository.
  Please use "svk depotmap" to edit the mapping.

o svk uses the subversion fs library. the SVN::XD module is a svn_wc
  (working copy) replacement (XD is character increment of WC).

o SVN::XD does not use the .svn for checkout meta-data. it uses
  Data::Hierarchy for storing per-directory meta-data in a compact way.

o svk uses svm (svn mirror) for retrieving remote repositories (via
  ra) to a certain point of the local repository.

o when committing (or merging) into the mirrored directory, svm
  provides a commit editor for svk to use. the merge brings changes
  from local to remote repository if there's no conflict.

o using a local repository holding the subversion tree for benchmark,
  svk checkout time is 3 times faster than svn.

* Installation

You need subversion 0.35 release or newer, with perl bindings support
to use svk.

svk uses the stanard perl module install process:

% perl Makefile.PL
% make
# make install

* Usage

o Use "svk depotmap" to make other repositories accessible from svk.

o Mirroring: For example if you want to bring the svk source tree to
  your local repository:
    svk mirror //svk/trunk

  Then you can now synchronize with:

    svk sync //svk/trunk

  If you don't want to sync every revision from the remote, you can
  add an -s REV option as the first revision to sync without previous

  Now you might want to create a local branch:

    svk cp -m 'local branch for svk' //svk/trunk //svk/local

o checkout / update / commit

  Most of the normal operations you use in svn would be found in svk also:

    svk co //svk/local svk # checkout to svk under current directory

  (Note that for the nature we don't use .svn directory, you can't move the
   checkout copies. A subcommand should be available in the future)

    svk up -r REV # update to revision <REV>

  Also note that subcommands does not support multiple targets at this

o merge

  In svk, you can merge into a checkout copy or into the repository
  directly. For example, if you want to bring your local change from
  rev 3 to rev 6 to the remote:

    svk merge -r 3:6 //svk/local //svk/trunk

  The commit by merge will be made to the remote repository in this
  case. (It's advised to check with -C to see if the merge succeeds)

o smerge

  Smart merge, or star-merge. This is a frontend of merge
  described above, storing extra information about performed merges,
  and finds appropriate revision numbers to use automatically.
Something went wrong with that request. Please try again.