Git + GitHub at Scale

gix keeps large fleets of repositories healthy.

Automate folder normalization, remote alignment, branch refresh, and workflow-driven maintenance with one CLI — purpose-built for teams juggling hundreds of repos.

Why gix?

Fleet Awareness

Discover repositories under one or more roots, skip nested duplicates, and run the same command everywhere without shell scripts.

Confident Automation

Domain-specific safeguards, “require clean” checks, interactive prompts, and a structured reporter ensure every operation is auditable.

Workflows, Not Bash

Describe multi-step plans (folder rename, remote update, git operations, PR creation) declaratively with YAML or run the built-in presets.

Multi-Repo Git Hygiene

Fix remotes, convert protocols, rename directories to canonical names, purge stale files, and refresh branches through one CLI.

LLM Helpers

Optional integrations assist with commit messages or changelog summaries while keeping human approvals in the loop.

Stack-Friendly

Every command runs through the same workflow engine, so CLI, automation, and CI all produce consistent logs and summaries.

Use cases we see every week

Platform Teams

  • Keep SDK repos aligned to the same branch default and remote protocol.
  • Roll out template updates by running workflows across every language pack.
  • Capture CSV audits for compliance reviews.

Security & Compliance

  • Ensure `.gitignore` and LICENSE files are present everywhere.
  • Trigger namespace rewrites after an organization rename.
  • Remove sensitive files from history with the `files rm` workflow.

Developer Tooling

  • Bootstrap new workspaces with `gix --init` and opinionated defaults.
  • Refresh dozens of example repos nightly to keep mergable branches.
  • Automate release tagging across mirrored repositories.

Everyday Workflows

Normalize Folders

gix folder rename --roots ~/Development --owner --yes

Rename directories to match owner/repo naming so your filesystem mirrors GitHub.

Fix Remotes

gix remote update-to-canonical --owner tyemirov --roots ~/Projects

Ensure every repository’s origin points at the canonical GitHub slug.

Convert Protocols

gix remote update-protocol --from https --to git --roots ~/Work --yes

Switch entire trees over to SSH (or vice versa) without touching each repo manually.

Refresh Branches

gix cd master --stash --roots ~/Fleet

Stash tracked changes, jump to master, pull updates, and restore your work.

Run a Workflow

gix workflow configs/maintenance.yaml --roots ~/Fleet --yes

Chain rename, remote updates, git operations, and PR creation with one declarative file.

Audit Everything

gix audit --roots ~/Fleet --all > audit.csv

Capture CSV output for branch defaults, owners, remote protocols, and more.

Architecture at a Glance

Recipes & Playbooks

Bulk switch and refresh branches

Branch Fleet
  1. Confirm the worktrees are clean or use --stash to store tracked changes.
  2. Run gix cd master --stash --roots ~/Fleet.
  3. Review the summary to see which repositories switched, skipped, or warned.
gix cd master --stash --roots ~/Fleet

Convert all remotes to SSH

Remote Hygiene
  1. Inspect current protocols with gix audit --roots ~/Repos.
  2. Execute gix remote update-protocol --from https --to git --roots ~/Repos --yes.
  3. Use the summary to confirm warnings (e.g., missing remotes).
gix remote update-protocol \
  --from https \
  --to git \
  --roots ~/Repos --yes

Roll out a repo workflow file

Workflow Rollout
  1. Author a workflow (example below) describing the desired steps.
  2. Run gix workflow ./configs/maintenance.yaml --roots ~/Fleet --yes.
  3. Inspect per-repo logs plus the summary line (warnings/errors).
workflow:
  - step:
      name: normalize
      command: ["folder", "rename"]
      with:
        include_owner: true
  - step:
      name: remotes
      after: ["normalize"]
      command: ["remote", "update-to-canonical"]

Learning Hub

Anatomy of a Workflow

Commands, steps, safeguards, templating, and summaries all flow through internal/workflow. The engine now plugs into pkg/taskrunner, which prints a concise summary when multiple repositories run.

Recipes Library

  • Namespace rewrite → gix workflow namespace --var namespace_old=... --var namespace_new=...
  • License seeding → gix workflow license --var template=apache
  • GHCR cleanup → gix packages delete --roots ~/Containers --yes

Ready to automate your fleet?

Install gix with Go 1.25+, point it at your repositories, and let it keep your fleet in shape.