← ClaudeAtlas

git-architecturelisted

ShipIt git architecture: GitManager (per-session), RepoGit (shared bare cache + per-session local clones), credential setup, auto-commit flow, session clone lifecycle, branch naming. Load when working on git operations, the bare cache, per-session clones, credentials, or repo management.
nikzlabs/shipit · ★ 5 · Code & Development · score 73
Install: claude install-skill nikzlabs/shipit
# Git Architecture ShipIt uses git for version control at two levels: per-session workspace repos managed by `GitManager`, and a shared per-remote bare cache (from which each session gets its own independent local clone) managed by `RepoGit`. Both use the `simple-git` library. > Each session gets its **own independent full clone** — `git clone --local` from the bare cache, which hardlinks objects so the clone is fast and disk-cheap. Each session owns a complete `.git/` and shares nothing mutable with its siblings. ## Two Git Layers ### GitManager (per-session) `src/server/shared/git.ts` — operates on a single session's workspace directory. Each session gets its own `GitManager` instance via the `createGitManager(dir)` factory. Used for: - `init()` — initialize repo with initial commit (so rollback always has a base) - `autoCommit(summary)` — stage all + commit if anything changed - `log(maxCount)` — commit history - `rollback(hash)` — hard reset to a previous commit - `push(remote, branch)` — push with upstream tracking - `pull(remote, branch)` — pull from remote - `addRemote(name, url)` / `getRemotes()` — remote management - `checkoutNewBranch(name)` / `renameBranch(old, new)` — branch operations - `diffSummary()` — per-file diff stats for the working tree - `diffStatVsBranch(baseBranch)` — insertions/deletions vs a base branch (for PR stats) - `getFileAtCommit(hash, filePath)` — file content at a specific commit - `diffNameStatus(from, to)` — changed files with statu