Skip to main content
This page is a working reference: every common shape you’d actually write under repositories:. For the conceptual model, see Concepts → Repositories.

Minimal git clone

Pin to a tag

Pin to a commit

SSH origin

Authentication uses your local SSH agent.

Mercurial / Subversion / Bazaar

These types require the matching system binary (svn, hg, bzr) on $PATH. Git uses a pure-Go backend with no system dependency.

Tarball release

version: for tar and zip is a strip-prefix string, gaal removes that leading directory during extraction so the contents land cleanly under src/data/dataset/.

Zip archive

Multiple repos at once

Behaviour at sync time

  • A first sync clones (or extracts) each entry into its destination path.
  • A subsequent sync fast-forwards or re-extracts based on version: and the remote state.
  • If the destination already exists and is not empty, gaal refuses to clone into it.
  • For existing Git checkouts, the working copy’s origin is authoritative. If gaal.yaml and origin disagree, sync stops with a remote URL mismatch error.
  • --dry-run reports + clone, ~ update, or = unchanged per entry.
  • Removing a repository entry from gaal.yaml does not delete its directory, --prune ignores repositories.
gaal owns the contents of each repository directory. Don’t make local edits inside a managed path, they’ll be lost on the next update. Use a separate working clone for development.

Concepts: repositories

Pinning versions

Schema: repositories