Version Control Systems: Svk
Forest Bond
Overview
- Author:
- Chia-liang Kao
- Model:
- distributed, but designed to work with a central server
- Language:
- Perl
- License:
- Perl (Artistic & GPL)
History
-
Svk was originally written by Chia-liang Kao, and was initially released
as version 0.01 on November 19th, 2003.
-
Chia-liang has since joined Best Practical, makers of the
somewhat-well-known ticketing system RT (Request Tracker). Svk is now a
Best Practical product (which means they provide commercial support for
it).
-
Current version of Svk is 1.0.8. Svk is used by many projects, including:
Concept
Svk is a distributed system, but is designed to be used as an extension to
a centralized system. In other words, Svk has the concept of "upstream"
built in.
-
This arrangement encourages a workflow that pushes and pulls changesets
to and from a centralized repository.
-
Local, non-public branches can still be created at will, allowing for
unfettered code experimentation with all of the benefits of off-line
changeset management.
-
Effectively, you get svn with a local repository that easily syncs with
the centralized server.
Concept (cont'd)
Svk (like Subversion), takes a generic approach to repository contents:
-
A single local repository (the "depot") stores an arbitrary
directory structure.
-
Each directory in the depot may or may not be associated with an
upstream repository; those that are can be periodically sync'ed.
-
Changes can be pushed and pulled to and from the parent of the directory
being worked in (which may be a mirror of a remote repository location or
just another branch in the local depot).
Concept (cont'd)
Typical depot structure:
- /
- mirror
- local
- myproject
- myproject_experimental_branch
- myproject_other_experimental_branch
User Interface
The primary Svk interface is the svk command-line utility:
-
The svk command-line interface should be familiar to Subversion/CVS users.
-
In addition to the standard svn commands, svk also provides some commands
for utilizing its distributed features: mirror, sync, push, pull.
-
svk has smerge ("star merge"); you don't have to remember revision numbers
to merge.
Advantages & Disadvantages
Advantages:
- Cross-platform
- Built on proven technology
- Integrates with widely used centralized systems
- Has smerge :)
Disadvantages:
- Limited merge freedom (No cherry-picking)
-
No unique identification of file objects or changesets —
how robust can smerge be?
- Written In Perl :)
Advantages – Cross-Platform
Svk should run on any system with a reasonably complete Perl implementation.
This includes:
- GNU/Linux
- Mac OS X
- FreeBSD
- NetBSD
- Solaris
- Windows
Advantages – Integration With Centralized Systems
Svk current supports mirroring of centralized repositories managed using the
following packages:
Conclusion
Svk is a de-centralized VCS that you can actually use at work, and enables
efficient branch-merge style workflows even without a network connection.