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]/ ~/.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 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.