Skip to main content

Deterministic local multi-repo checkpointing for repo families.

Project description

Gites

Gites is a local-first command line tool for deterministic multi-repo checkpointing.

It is designed for a root directory that contains many Git repositories. Gites previews repo state, refuses unsafe repositories, commits with an explicit deterministic message, pushes safely, and records each run in a local ignored ledger.

Install

pip install gites

For local development:

pip install -e .

Simple Workflow

Register the current directory as a repo root:

cd ~/All_github_repo
gites init

Or register a Windows-mounted repo root from WSL:

gites init /mnt/c/Documents/All_github_repo --name win --branch main

List saved roots:

gites dirs

Switch active root:

gites use win

Show the current repo-state table for a saved root:

gites view
gites view win
gites status win
gites win

Large repo roots can be slow on WSL paths such as /mnt/c/.... view, status, and object shortcuts inspect repositories in parallel, show progress by default, and skip expensive untracked-file enumeration unless requested:

gites view win --jobs 16 --timeout 20
gites view win --untracked
gites view win --no-progress

Preview what would be pushed:

gites push
gites push win

Apply with a deterministic commit message:

gites push -m "chore: checkpoint repo family 2026-05-11"

The saved directory config lives outside the repo at ~/.config/gites/config.json.

Explicit Workflow

Preview repositories under a root directory:

gites plan --root ~/All_github_repo --branch main

Dry-run a checkpoint:

gites sync --root ~/All_github_repo --branch main --dry-run

Apply a checkpoint with an explicit commit message:

gites sync --root ~/All_github_repo \
  --branch main \
  --apply \
  --message "chore: checkpoint repo family 2026-05-10"

Read local run ledgers:

gites ledger list --root ~/All_github_repo
gites ledger show RUN_ID --root ~/All_github_repo

Ledgers are written under .gites/ledgers/ inside the selected root. That directory is intentionally ignored by Git.

Safety Rules

gites sync --apply refuses a repository when it detects:

  • detached HEAD
  • merge, rebase, cherry-pick, or revert in progress
  • unresolved conflicts
  • wrong branch
  • missing origin
  • missing upstream branch
  • branch behind upstream
  • branch diverged from upstream
  • protected path changes such as .env, secrets/, private/, or internal/
  • changed files larger than the configured size limit
  • missing commit message in apply mode

Gites never force-pushes by default.

Manifest Files

Real manifests should stay local and ignored, for example my_gites.json or gites.local.json.

Create a local template:

gites config init my_gites.json

Validate a manifest:

gites config validate my_gites.json

Use a family from a manifest:

gites sync --manifest my_gites.json \
  --family default \
  --dry-run

A sanitized public example is available at examples/example.gites.json.

Development

Run tests:

python -m unittest discover -v

Privacy

Do not commit real manifests, ledgers, credentials, ChatGPT exports, private notes, or local editor state. The repository .gitignore blocks the intended local-only paths.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gites-0.5.5.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gites-0.5.5-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file gites-0.5.5.tar.gz.

File metadata

  • Download URL: gites-0.5.5.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gites-0.5.5.tar.gz
Algorithm Hash digest
SHA256 70e3c400462b89fc6d3611e901c8b2b0bcb9778717130798ce25d665091d6996
MD5 f57ba0336fe8423908c027b72cae6de0
BLAKE2b-256 ae94acca4bd33bcd2142235f26bc8c20f2d815ed8f708a0db1055e1027631dff

See more details on using hashes here.

File details

Details for the file gites-0.5.5-py3-none-any.whl.

File metadata

  • Download URL: gites-0.5.5-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gites-0.5.5-py3-none-any.whl
Algorithm Hash digest
SHA256 600c01c9a64dea80ebeeb44e7a0fb9676b929e9b767e091fda1348990032b237
MD5 4ee4bbc2b7f90aa748d24b7ff6d06c9a
BLAKE2b-256 091dc690968c89fc4596bcc4e9cc282a64c2f270bf84d0f6cb20be8c0c84a205

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page