Git repositories for Jennifer through the
git command line: open, create and clone repositories; status, staging,
commits and stashes; log, diffs, blame and files at any revision; branches,
tags and merges; fetch, pull and push. Results are typed structs parsed from
git's machine-readable output. Built for names and URLs you do not control:
option injection, remote helpers, repository-redirecting environment
variables and hooks are all shut off, and every command has a timeout.
jvc add @deckyard/gitOr unpack src/ from a release archive (deckyard-git-<version>.tar.gz)
into vendor/deckyard/git/.
import "@deckyard/git/" as git;
def repo as git.Repo init git.open(git.config(), ".");
def s as git.Status init git.status($repo);
io.printf("%s, %d changed\n", $s.branch, len($s.changes));
for (def c in git.log($repo, "", "", 5)) {
io.printf("%s %s\n", strings.substring($c.hash, 0, 8), $c.subject);
}
Jennifer 0.25.0 or newer and the default jennifer binary (the deck needs
the exec capability); git 2.25 or newer and env on the PATH.
tools/check-all.sh # the full gate, as CI runs it
jennifer test src/git_test.j # tests; the live ones need git
tools/check-docs.sh # docs against the codeThe tests that run git use throwaway repositories in the temp directory and no network. They return early where git is not installed, as in CI's container; run the suite on a machine with git before a release.
LGPL-3.0-only, see LICENSE. Copyright (C) 2026 mplx <mplx@jennifer-lang.dev>.
Git is a trademark of the Software Freedom Conservancy. This deck is not affiliated with or endorsed by it.