Table of Contents



$ cd /var/svn
$ svnadmin create repos
$ ls repos
conf/ dav/ db/ format hooks/ locks/ README.txt

suppose we have a directory:


import to repo:

$ svn import /tmp/myproject file:///var/svn/repos/myproject \
      -m "initial import"
Adding         /tmp/myproject/branches
Adding         /tmp/myproject/tags
Adding         /tmp/myproject/trunk
Adding         /tmp/myproject/trunk/foo.c
Adding         /tmp/myproject/trunk/bar.c
Adding         /tmp/myproject/trunk/Makefile
Committed revision 1.

Typical Work Cycle

  1. Update your working copy: svn update
  2. Make your changes.
    • svn add
    • svn delete
    • svn copy
    • svn move
  3. Review your changes
    • svn status --verbose(-v) --show-updates(-u)
    • svn diff (> patch)
  4. Fix your mistackes
    • svn revert
  5. Resolve any conflicts (merge others’ changes)
    • svn update
    • svn resolve
  6. Publish (commit) your changes: svn commit

Branching and tagging

Subversion uses the inter-file branching model to implement branches and tagging. A branch is a separate line of development. Tagging refers to labeling the repository at a certain point in time so that it can be eaily found in the future. The only difference between branches and tags is how they are used.

A new branch or tag is set up by using the svn copy command, which should be used in place of the native operating system mechanism. The copied directory is linked to the original in the repository to preserve its history, and the copy takes very little extra space in the repository.

All the versions in each branch maintain the history of the file up to the point of the copy, plus any changes made since. One can merge changes back into the trunk or between branches.


  • Fs
    • The lowest lavel
    • implements the versioned filsystem which stores the user data
    • two-dimensional
      • Path (regular path of Unix-like OS filesystem)
      • Revision
  • Repos
    • Concerned with the repository built up around the filesystem
  • mod_dav_svn
    • provides WebDAV/Delta-V access through Apache 2
  • Ra (Repository Access)
    • handles “repository access”, both local and remote
    • e.g.
      • file:///path/ for local access
      • http://host/path/ or https://host/path/ for WebDav access
      • svn://host/path/ or svn+ssh://host/path/ for the SVN protocol
  • Client, Wc
    • The highest level
    • abstracts repository access and provides common client tasks
    • Subversion cilents use the Wc library to manage the local working copy


Mercurial is a free, distributed source control management tool. It efficiently handles projects of any size and offers an easy and intuitive interface.



username = Will D. Thomas <>


default = ssh://
pretxcommit = .hg/

Quick Start

$ hg clone
$ cd hello
$ (edit files)
$ hg add (new files)
$ hg commit -m 'My changes'
$ hg push


To see a certain revision, you can use the -r switch (–revision). To also see the diff of the displayed revisions, there’s the -p switch (–patch)

hg log -p -r 3
  • -r: –revision
  • -p: –patch


git commit --amend
hg rollback
hg commit -m 'this time is all right'




git config --global 'oxnz'
git config --global
git config --global color.ui true
git config --global checkout
git config --global status
git config --global branch
git config --global alias.hist "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"
git config --global alias.type 'cat-file -t'
git config --global alias.dump 'cat-file -p'
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
# cache credential
# Set git to use the credential memory cache
git config --global credential.helper cache
# Set the cache to timeout after 1 hour (setting is in seconds)
git config --global credential.helper 'cache --timeout=3600'


    default = matching
    name = oxnz
    email =
    ui = true
    co = checkout
    st = status
    ci = commit
    br = branch
    hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
    type = cat-file -t
    dump = cat-file -p
    unstage = reset HEAD --
    last = log -1 HEAD