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

* 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 svk.elixus.org)

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.36 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 http://svn.elixus.org/repos/member/clkao/svk

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

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

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.
