# git-cli A small command-line-like Git interface for Racket. The package invokes the installed `git` executable and exposes commands both through the generic `git` procedure and through direct procedures. ```racket (require git-cli) (git 'status) (git 'log '-l '-5) (git 'fetch '--prune) (git 'switch "main") (git 'tag "v0.3.16") (git 'diff) (git 'show 'HEAD) (git-status) (git-fetch '--prune) (git-switch "main") (git-tag "v0.3.16") ``` `git` is an ordinary procedure. The first argument is the Git command symbol and the remaining arguments are passed to that command. Several commands provide Racket-oriented output in addition to the normal Git behavior: - `git-status` uses Git's porcelain status and returns structured status items. - `git-log -l` / `git-log --list` returns `(commit subject)` items. - `git-diff` renders HTML by default; `--output=-` selects stdout and `--output=string` returns a string. - `git-show` renders a commit and its diff as HTML by default. `-l` / `--list` provides structured variants for `--stat`, `--name-only`, and `--name-status`. Git is searched on `PATH`. Git itself remains responsible for remotes, credentials, SSH keys, pull strategy, and other repository configuration. ## Commands The package currently registers commands including `status`, `add`, `commit`, `push`, `pull`, `fetch`, `branch`, `switch`, `clone`, `tag`, `log`, `rev-list`, `diff`, `show`, `grep`, `help`, `version`, and `new-version`. Most are also exported as direct procedures such as `git-status`, `git-add`, `git-fetch`, `git-switch`, `git-tag`, `git-log`, `git-diff`, and `git-show`. See the Scribble documentation for command-specific behavior and return values.