# 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