View on GitHub

sos

Subversion Offline Solution

SOS v1.6.7

Travis badge Build status Code coverage badge PyPI badge Gitter chat

From the author

I’ve been developing this software continuously over the course of the last months in my spare time, and I think it turned out great so far. Due to other duties in my life I cannot, however, continue at this pace without the support of a lively community, or getting some kind of funding for the effort that I put into SOS. Bug reports, feature requests and contributions are welcome, granted there’s enough time to process them. Please support SOS in any way suiting you, and spread the word!

List of Abbreviations and Definitions

Introduction

SOS logo If you (love, or simply have to) work with the SVN VCS, but need (or lack) the flexibility of committing and branching files offline (without a permanent network connection) similar to how Git is able to, SOS is your straight-forward and super simple command-line SCM solution.

SOS allows performing offline operations a) as a drop-in replacement for svn and other VCS, b) as an offline extension of those VCSs that either don’t support offline branching and committing or are too complex, and c) as a standalone VCS. You may run sos offline not only inside a SVN checkout, but in any (and also multiple, even nested) folders of your file system, even outside of VCS repository checkouts/clones.

SOS thus augments SVN with offline operation and serves the same need as SVK, RCS, CVS, Git, gitless, monotone, darcs, Bazaar, Mercurial, and Fossil.

As an additional practical benefit, the sos command will double as the command line interface of any popular VCS and will execute any svn, git, etc. command by sos <command> [<arguments-and-options>], e.g. sos commit -m "Message" instead of svn commit -m "Message" or git commit -m "Message". Once you executed sos offline, however, all commands are interpreted by the SOS tool instead, until leaving the offline mode via sos online (with the exception of sos config, cf. details below).

Flexible VCS Modes

SOS supports three different file handling models that you may use to your liking, thus being able to mimick different traditional VCSs, plus a new mode for super quick and easy version management (the default).

Unique Features of SOS

Limitations

Compatibility

Latest Changes

Comparison with Traditional VCSs

While completing version 1.0 of SOS after almost two months of development, I incidentally discovered an interesting article by Gregory Szorc that discusses central weaknesses in the design of popular VCSs, with a focus on Git. Many of his arguments I have intuitively felt to be true as well and were the reason for the development of SOS: mainly the reduction of barriers between the developer’s typical workflow and the VCS, which is most often used as a structured tool for “type and save in increments”, while advanced features of Git are just very difficult to remember and get done right.

Here is a comparison between SOS and traditional VCS’s commands:

Working in Track and Picky Modes

Use the commands sos add <pattern> or sos rm <pattern> to add or remove file patterns. These patterns always refer to a specific (relative) file paths and may contain globbing characters ?*[!] only in the filename part of the path.

Configuration Options

These options can be set or unset by the user and apply either globally for all offline operations the user performs from that moment on, or locally to one repository only (using the --local option flag). There is currently no --system scope (like Git supports), because SOS has been designed mainly as a single-user tool and we don’t want to patronize users. Some of these options can be defined on a per-repository basis already during offline repository creation (e.g. sos offline --track --strict --compress), others can only be set in a persistant fashion (e.g. sos config set texttype "*.xsd"), or after repository creation (e.g. sos config set texttype "*.xsd;*.xml" --local).

Configuration Commands

User Configuration and Defaults

SOS uses the configr library to manage per-user global defaults, e.g. for the --strict and --track flags that the offline command takes, but also for often-used file and folder exclusion patterns. By means of the sos config set <key> <value> command, you can set these flags with values like 1, no, on, false, enable or disabled.

Available Configuration Settings

Noteworthy Details

Recipes

Hints and Tipps

Development and Contribution

See CONTRIBUTING.md for further information.

Ideas for future developments:

Release Management