summaryrefslogblamecommitdiffstats
path: root/README.md
blob: 79ec05a28aa58a34976115a3a11399b6fcd183a4 (plain) (tree)





























































                                                                                                     
# systrunk

Systrunk is a simple version control system, implemented in BASH utilizing rsync, amonst
other utilities.  'Trunk' is a common term from VCSs referring to the main data branch.
The name 'systrunk' comes from the fact that this software aims to provide versioning to
full system image backups.

Systrunk shares a lot of themes with both git and subversion.  Systrunk worktrees operate
on a centralized repository, and therefore names like HEAD, etc. derive their meaning from
that in subversion.  Systrunk also implements proper branching, and uses something that
roughly resembles the DAG commit graph that git does to model a repository's history.

Systrunk (technically) does merging pretty meh...  Definately room for improvement, but
gets the job done for now.  The biggest problems being that systrunk doesn't implement
merging on a file level, but only a tree merge.  This means that systrunk will identify
a file that both branches have modified, but won't at all figure out what the merged
file should be; instead it opens both copies of the file in vimdiff for the user to
figure out.  The other issue being that systrunk can't tell the difference between files
{deleted by one branch / modified by the other} and files {created by one of the branches}.
Systrunk does, however, acknowledge this shortcomming and offers interactive prompts to
help the users resolve each found 'conflict'.

## reserved names

These reserved reference names are used to reference commits, their meaning is given here...

HEAD        Lastest mainline (trunk) commit.  This is actually the name of a proper branch,
            but cannot be deleted.  Think 'master' branch from git.
BASE        Current checked out commit, the commit the worktree is based on.
TRAC        This will usually reference another reference.  This points to the branch that
            the current worktree is tracking.  Think about the 'HEAD' pointer from git.
NULL        Literally means 'no commit'.
MERG        If a merge operation is in progress, this will point to the branch or commit
            ID being merged.  Otherwise this is NULL.

## translated commands

Below is a matchup of some basic systrunk commands and their git counterparts...

SYSTRUNK COMMAND           GIT COMMAND                       EXPLANATION

systrunk checkout          git clone / git checkout          This systr cmd not only checks out
                                                             new files, but also inits the worktree

systrunk commit            git commit
systrunk status            git status
systrunk init              git init --bare

systrunk clone             git clone --no-checkout           Since systr uses a central repo, clone
                                                             is not the operation used to setup a
                                                             workspace, but instead produces a copy
                                                             of *just* the repository; intended for
                                                             backup purposes.

systrunk reset             git reset --soft / git commit     This systr cmd allows user to commit
                                                             directly to a branch from anywhere else.

systrunk tag               git branch                        Systrunk tags are identical to branches
systrunk log               git log
systrunk shortlog          git rev-list
systrunk merge             git merge
systrunk update            git pull