Gnit is a Rust CLI distributed as a single binary. The implementation shells out
to git at first and keeps Git as the source of truth.
- Root Rust package named
gnit. - Clap-based command surface.
gnit init,gnit clone,gnit adopt,gnit ignore,gnit import-submodule,gnit add,gnit commit,gnit land,gnit checkout,gnit push,gnit status,gnit doctor,gnit pin,gnit change,gnit review, andgnit updateinitial commands.- typed roster and Pin metadata persisted as YAML.
- transparent upkeep hook, wired but intentionally non-destructive
install.shmatching the GitHub Release tarball/checksum pattern.- Workflow tests for root repo setup, nested repo adoption, local excludes, metadata-only commits, dirty-worktree pin refusal, Pin creation, ordered push resume, clone plus pinned checkout, combined review, submodule import, doctor exclude repair, and update dry-run.
gnit init.gnit/roster.yamlgnit adopt- automatic local-exclude repair
- workspace root discovery
- status grouping by member repo
gnit addgnit commitGnit-Change-Idtrailer generation- Change projection and ambiguity reporting
- trailer-based
gnit change status/show/log/diff
gnit pingnit land- pin artifacts under
.gnit/pins/ - metadata auto-commit
gnit pin --changeprovenance recording
gnit checkout <pin>- missing member clone/materialization
--exactdestructive mode with confirmation/policy- safe checkout refuses dirty members unless
--exact
- ordered
gnit push - strict
gnit push --resumeretry - partial-landing reports
gnit reviewgnit doctorrecovery for trailers, pins, excludes, and remote drift
- rich
gnit status: root and per-member staged/modified/untracked counts, branch, missing members, member drift from the current pin, and discovered-but-unadopted repos gnit log: unified, newest-first timeline of Changes and Pins- real transparent upkeep: self-healing local-exclude repair on every command (fast, quiet, non-destructive, no network)
- official release builds read a local update cache on normal commands
- if a newer release is cached, print a one-line
gnit updatenotice at most once per day - if the cache is missing or stale, schedule a detached refresh with a bounded GitHub Releases request only for interactive official builds outside CI
- keep binary replacement explicit through
gnit update - expose
gnit update --checkfor an explicit metadata refresh
- use Pin branch hints and local/remote branch tips during
gnit checkout - keep normal checkouts on branches when safe
- detach only when no branch points at the pinned commit, and warn clearly
- avoid hidden branch ref rewrites in
gnit checkout --exact - harden cached-update parsing from the v0.3.0 third-party review
- report pushed, already-landed, failed, not-attempted, and held-back targets
- keep
gnit pushandgnit push --resumeon one strict ordered policy - use remote refs as the resume journal; do not write local push state
- stop at the first member failure and hold root/control metadata back
- block root/control push when a Pin references a member commit no longer reachable from the member branch being published
- GitHub Release assets for supported platforms.
checksums.txtverification.gnit updateexplicit binary replacement once release assets exist.gnit update --checkexplicit release metadata check.- cached update notices for official binaries.
- no self-update for dev builds unless forced.
- signed releases before any default auto-install policy is reconsidered.