add git example

eg: go run git.go git_add.go remote rename old new
diff --git a/examples/git/git.go b/examples/git/git.go
new file mode 100644
index 0000000..00b0965
--- /dev/null
+++ b/examples/git/git.go
@@ -0,0 +1,84 @@
+package main
+
+import (
+	"fmt"
+	"github.com/docopt/docopt.go"
+	"os"
+	"os/exec"
+)
+
+func main() {
+	usage := `usage: git [--version] [--exec-path=<path>] [--html-path]
+           [-p|--paginate|--no-pager] [--no-replace-objects]
+           [--bare] [--git-dir=<path>] [--work-tree=<path>]
+           [-c <name>=<value>] [--help]
+           <command> [<args>...]
+
+options:
+   -c <name=value>
+   -h, --help
+   -p, --paginate
+
+The most commonly used git commands are:
+   add        Add file contents to the index
+   branch     List, create, or delete branches
+   checkout   Checkout a branch or paths to the working tree
+   clone      Clone a repository into a new directory
+   commit     Record changes to the repository
+   push       Update remote refs along with associated objects
+   remote     Manage set of tracked repositories
+
+See 'git help <command>' for more information on a specific command.
+`
+	args, _ := docopt.Parse(usage, nil, true, "git version 1.7.4.4", true)
+
+	fmt.Println("global arguments:")
+	fmt.Println(args)
+
+	fmt.Println("command arguments:")
+	cmd := args["<command>"].(string)
+	cmdArgs := args["<args>"].([]string)
+
+	err := runCommand(cmd, cmdArgs)
+	if err != nil {
+		fmt.Println(err)
+		os.Exit(1)
+	}
+}
+
+func goRun(scriptName string, args []string) (err error) {
+	cmdArgs := make([]string, 2)
+	cmdArgs[0] = "run"
+	cmdArgs[1] = scriptName
+	cmdArgs = append(cmdArgs, args...)
+	osCmd := exec.Command("go", cmdArgs...)
+	var out []byte
+	out, err = osCmd.Output()
+	fmt.Println(string(out))
+	if err != nil {
+		return
+	}
+	return
+}
+
+func runCommand(cmd string, args []string) (err error) {
+	argv := make([]string, 1)
+	argv[0] = cmd
+	argv = append(argv, args...)
+	switch cmd {
+	case "add":
+		// subcommand is a function call
+		return cmdAdd(argv)
+	case "branch":
+		// subcommand is a script
+		return goRun("git_branch.go", argv)
+	case "checkout", "clone", "commit", "push", "remote":
+		// subcommand is a script
+		scriptName := fmt.Sprintf("git_%s.go", cmd)
+		return goRun(scriptName, argv)
+	case "help", "":
+		return goRun("git.go", []string{"git_add.go", "--help"})
+	}
+
+	return fmt.Errorf("%s is not a git command. See 'git help'", cmd)
+}
diff --git a/examples/git/git_add.go b/examples/git/git_add.go
new file mode 100644
index 0000000..250ac7c
--- /dev/null
+++ b/examples/git/git_add.go
@@ -0,0 +1,30 @@
+package main
+
+import (
+	"fmt"
+	"github.com/docopt/docopt.go"
+)
+
+func cmdAdd(argv []string) (err error) {
+	usage := `usage: git add [options] [--] [<filepattern>...]
+
+options:
+    -h, --help
+    -n, --dry-run        dry run
+    -v, --verbose        be verbose
+    -i, --interactive    interactive picking
+    -p, --patch          select hunks interactively
+    -e, --edit           edit current diff and apply
+    -f, --force          allow adding otherwise ignored files
+    -u, --update         update tracked files
+    -N, --intent-to-add  record only the fact that the path will be added later
+    -A, --all            add all, noticing removal of tracked files
+    --refresh            don't add, only refresh the index
+    --ignore-errors      just skip files which cannot be added because of errors
+    --ignore-missing     check if - even missing - files are ignored in dry run
+`
+
+	args, _ := docopt.Parse(usage, nil, true, "", false)
+	fmt.Println(args)
+	return
+}
diff --git a/examples/git/git_branch.go b/examples/git/git_branch.go
new file mode 100644
index 0000000..a34220a
--- /dev/null
+++ b/examples/git/git_branch.go
@@ -0,0 +1,38 @@
+package main
+
+import (
+	"fmt"
+	"github.com/docopt/docopt.go"
+)
+
+func main() {
+	usage := `usage: git branch [options] [-r | -a] [--merged=<commit> | --no-merged=<commit>]
+       git branch [options] [-l] [-f] <branchname> [<start-point>]
+       git branch [options] [-r] (-d | -D) <branchname>
+       git branch [options] (-m | -M) [<oldbranch>] <newbranch>
+
+Generic options:
+    -h, --help
+    -v, --verbose         show hash and subject, give twice for upstream branch
+    -t, --track           set up tracking mode (see git-pull(1))
+    --set-upstream        change upstream info
+    --color=<when>        use colored output
+    -r                    act on remote-tracking branches
+    --contains=<commit>   print only branches that contain the commit
+    --abbrev=<n>          use <n> digits to display SHA-1s
+
+Specific git-branch actions:
+    -a                    list both remote-tracking and local branches
+    -d                    delete fully merged branch
+    -D                    delete branch (even if not merged)
+    -m                    move/rename a branch and its reflog
+    -M                    move/rename a branch, even if target exists
+    -l                    create the branch's reflog
+    -f, --force           force creation (when already exists)
+    --no-merged=<commit>  print only not merged branches
+    --merged=<commit>     print only merged branches
+`
+
+	args, _ := docopt.Parse(usage, nil, true, "", false)
+	fmt.Println(args)
+}
diff --git a/examples/git/git_checkout.go b/examples/git/git_checkout.go
new file mode 100644
index 0000000..4730fd6
--- /dev/null
+++ b/examples/git/git_checkout.go
@@ -0,0 +1,30 @@
+package main
+
+import (
+	"fmt"
+	"github.com/docopt/docopt.go"
+)
+
+func main() {
+	usage := `usage: git checkout [options] <branch>
+       git checkout [options] <branch> -- <file>...
+
+options:
+    -q, --quiet           suppress progress reporting
+    -b <branch>           create and checkout a new branch
+    -B <branch>           create/reset and checkout a branch
+    -l                    create reflog for new branch
+    -t, --track           set upstream info for new branch
+    --orphan <new branch>
+                          new unparented branch
+    -2, --ours            checkout our version for unmerged files
+    -3, --theirs          checkout their version for unmerged files
+    -f, --force           force checkout (throw away local modifications)
+    -m, --merge           perform a 3-way merge with the new branch
+    --conflict <style>    conflict style (merge or diff3)
+    -p, --patch           select hunks interactively
+`
+
+	args, _ := docopt.Parse(usage, nil, true, "", false)
+	fmt.Println(args)
+}
diff --git a/examples/git/git_clone.go b/examples/git/git_clone.go
new file mode 100644
index 0000000..fac90b0
--- /dev/null
+++ b/examples/git/git_clone.go
@@ -0,0 +1,37 @@
+package main
+
+import (
+	"fmt"
+	"github.com/docopt/docopt.go"
+)
+
+func main() {
+	usage := `usage: git clone [options] [--] <repo> [<dir>]
+
+options:
+    -v, --verbose         be more verbose
+    -q, --quiet           be more quiet
+    --progress            force progress reporting
+    -n, --no-checkout     don't create a checkout
+    --bare                create a bare repository
+    --mirror              create a mirror repository (implies bare)
+    -l, --local           to clone from a local repository
+    --no-hardlinks        don't use local hardlinks, always copy
+    -s, --shared          setup as shared repository
+    --recursive           initialize submodules in the clone
+    --recurse-submodules  initialize submodules in the clone
+    --template <template-directory>
+                          directory from which templates will be used
+    --reference <repo>    reference repository
+    -o, --origin <branch>
+                          use <branch> instead of 'origin' to track upstream
+    -b, --branch <branch>
+                          checkout <branch> instead of the remote's HEAD
+    -u, --upload-pack <path>
+                          path to git-upload-pack on the remote
+    --depth <depth>       create a shallow clone of that depth
+`
+
+	args, _ := docopt.Parse(usage, nil, true, "", false)
+	fmt.Println(args)
+}
diff --git a/examples/git/git_push.go b/examples/git/git_push.go
new file mode 100644
index 0000000..bddba2e
--- /dev/null
+++ b/examples/git/git_push.go
@@ -0,0 +1,34 @@
+package main
+
+import (
+	"fmt"
+	"github.com/docopt/docopt.go"
+)
+
+func main() {
+	usage := `usage: git push [options] [<repository> [<refspec>...]]
+
+options:
+    -h, --help
+    -v, --verbose         be more verbose
+    -q, --quiet           be more quiet
+    --repo <repository>   repository
+    --all                 push all refs
+    --mirror              mirror all refs
+    --delete              delete refs
+    --tags                push tags (can't be used with --all or --mirror)
+    -n, --dry-run         dry run
+    --porcelain           machine-readable output
+    -f, --force           force updates
+    --thin                use thin pack
+    --receive-pack <receive-pack>
+                          receive pack program
+    --exec <receive-pack>
+                          receive pack program
+    -u, --set-upstream    set upstream for git pull/status
+    --progress            force progress reporting
+`
+
+	args, _ := docopt.Parse(usage, nil, true, "", false)
+	fmt.Println(args)
+}
diff --git a/examples/git/git_remote.go b/examples/git/git_remote.go
new file mode 100644
index 0000000..5ee32ac
--- /dev/null
+++ b/examples/git/git_remote.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+	"github.com/docopt/docopt.go"
+)
+
+func main() {
+	usage := `usage: git remote [-v | --verbose]
+       git remote add [-t <branch>] [-m <master>] [-f] [--mirror] <name> <url>
+       git remote rename <old> <new>
+       git remote rm <name>
+       git remote set-head <name> (-a | -d | <branch>)
+       git remote [-v | --verbose] show [-n] <name>
+       git remote prune [-n | --dry-run] <name>
+       git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
+       git remote set-branches <name> [--add] <branch>...
+       git remote set-url <name> <newurl> [<oldurl>]
+       git remote set-url --add <name> <newurl>
+       git remote set-url --delete <name> <url>
+
+options:
+    -v, --verbose         be verbose; must be placed before a subcommand
+`
+
+	args, _ := docopt.Parse(usage, nil, true, "", false)
+	fmt.Println(args)
+}