Subversion Offline Solution (SOS 1.4.3)

Travis badge Build status Code coverage badge PyPI badge

Important notice from the author

I’ve been developing this software over the course of the last 4 months in my spare time, and until version 1.4 I’ve put probably around 200 working hours into it, a rough equivalent of 8.500€ in development costs that I have granted to the open source community. Lately, this project has taken too much time away from my family and other significant themes in my life. I cannot continue at the current pace, unless getting support in form of a lively SOS community, or by getting funding for the effort that I put into SOS. Since SOS is already quite mature, so I will reduce my efforts and contribute only little enhancements and bug fixes according to my own pace and priorities, unless someone comes with contributions, or feature requests and means to support them. As a user of open source software I hope you can relate to this decision and support SOS in any way suiting you, to make it our number one personal productivity tool!

List of Abbreviations and Definitions


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 commands, 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



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


Hints and Tipps

Development and Contribution

See for further information.

Ideas for future developments:

Release Management