gitpace
v0.3.1
Published
Two-track git workflow for batching and timing client commits
Downloads
500
Readme
gitpace
Two-track git workflow for batching and timing client commits.
Batch your work session on a private branch backed up to your own remote. Ship commits to the client branch with hand-picked timestamps, one chunk at a time.
Install
npm install -g gitpace # or: npx gitpaceThen in any repo:
gitpaceThe TUI walks you through first-time setup (detects your origin, prompts for
the URL of your private "gitpace" remote, installs a pre-push safety hook).
Prerequisites
- Node 20+
- git
Usage
gitpace # Open the TUI (default)
gitpace start-feature <name> # Create <name> + gitpace-<name> from origin/main
gitpace attach # Adopt the current origin branch as a gitpace feature
gitpace switch # Switch between gitpace-managed features
gitpace ship # Cherry-pick commits with custom timestamps
gitpace resync # Pull origin and rebase working branches
gitpace setup # Re-run first-time setup
gitpace help # Show helpFlags: -v / --verbose to surface raw git output.
The workflow
gitpace-<name>— your working branch. Pushed only to your privategitpaceremote. Never reaches the client.<name>— the client-facing branch on origin. Commits arrive here one ship at a time via the TUI, each with a custom timestamp.
You batch many small commits on gitpace-<name> during one session; later
you run gitpace ship, pick the commit cutoff, set a session window
(default 10:00 – now), and the chunk lands on <name> with timestamps.
Demo mode
To play with the TUI on fake data without touching any real repo:
npm run demo # pick a scenario, then drop into the TUI
npm run demo -- active # jump straight to a seeded scenario
npm run demo:reset # wipe the demo sandboxScenarios: fresh (run setup wizard), ready, active (commits ready to
ship), multi (multiple features for switch), teammate (origin moved
ahead for resync), attachable (existing origin branch for attach).
The sandbox lives at $TMPDIR/gitpace-demo/ — entirely outside your repo.
What gitpace writes to your clone (local only)
- Adds a
gitpaceremote (your private repo for thegitpace-*work branches) - Installs a
pre-pushhook in.git/hooks/pre-push(or yourcore.hooksPathif set) — blocksgitpace-*branches from ever reaching origin. An existingpre-pushhook is backed up topre-push.pre-gitpace. - Sets a few configs in
gitpace.*namespace (origin,remote,branch)
That's it. core.hooksPath, remote.pushDefault, and aliases are never
touched — you can use the repo normally outside gitpace. Branches created by
gitpace have proper per-branch upstreams (<feature> → origin,
gitpace-<feature> → gitpace), so git push from any branch goes where you'd
expect.
None of this touches origin or anyone else who pulls from it.
Gotchas
- The hook is per-clone. Re-run setup after cloning on a new machine (the TUI detects this automatically).
- Don't rebase the origin branch after the client has reviewed it. Use
git merge maininstead. - The
pre-pushhook is your safety net — blocksgitpace-*branches from reachingorigin. - Cherry-pick conflicts are caught and the script stops with recovery instructions instead of silently failing.
License
MIT
