Releases: jdevera/git-this-bread
v0.3.0
Highlights
Per-profile SSH sub-agent for git-as
git-as <profile> now routes through its own ssh-agent loaded with only that profile's key, addressed via IdentityAgent=<sock>. The system agent is untouched — plain git push and plain ssh github.com continue to use whatever key your default agent serves. Inside git-as, only the profile's key is offered, so a colliding key on another account can no longer win the race and silently authenticate as the wrong user.
The sub-agent persists across invocations as a passphrase cache:
- macOS:
ssh-add --apple-use-keychainis passed automatically. First-ever invocation prompts; passphrase is stored in Keychain; every subsequent call (including across reboots) is silent. - Linux: inherits your
SSH_ASKPASSchain, so gnome-keyring / ksshaskpass / etc. caches it the same way they do for the system agent.
New: git-id agent subcommand tree
git-id agent list # alive/dead, PID, key count, socket path
git-id agent kill <profile> # terminate (next git-as respawns)
git-id agent kill --all
git-id agent reload <profile> # re-run ssh-add against the existing sub-agent
New profile field: usecustomagent
Default true. Set to false to opt out of the sub-agent for a specific profile — useful when your system agent is itself per-key isolated (1Password, KeePassXC, gpg-agent with destination constraints, gnome-keyring's gcr-ssh-agent).
git-id set <profile> usecustomagent false
Bug fix: env override after execve
Profile env entries appended to os.Environ() left duplicate keys in the slice handed to syscall.Exec. On macOS the kernel/libc dedup keeps the first occurrence — the parent's value — so a parent-set GIT_SSH_COMMAND or GIT_AUTHOR_EMAIL silently survived. Fixed by stripping overridden keys from the parent env before appending profile values.
Documentation
User-facing references moved out of the README:
docs/git-as.md— mental model, sub-agent lifecycle, troubleshootingdocs/git-id.md— schema, subcommands, common workflows
Install / upgrade
brew upgrade jdevera/tap/git-this-breadCompatibility
- Existing profiles continue to work;
usecustomagentdefaults totrue, which means the sub-agent is on by default. Single-key users won't notice anything except (on macOS) one passphrase prompt the first time, then silence forever. - The fallback to
/tmp/gtb-<uid>/triggers when the cache-dir socket path would exceed the ~104-bytesun_pathlimit (mostly relevant on macOS with deep$TMPDIR).
v0.2.1
v0.2.0
v0.1.6
v0.1.5
v0.1.4
v0.1.3
v0.1.2
v0.1.1
v0.1.0
Changelog
- fecb3ff Initial commit: git-explain tool
- ff1e204 ci: add GoReleaser and GitHub Actions release workflow
- 679bdb5 feat(git-explain): add LLM-powered advice with caching
- 7469dfe feat(git-explain): default to verbose for single repo, compact for multi
- e18b3ad feat(git-explain): use lipgloss table for prettier table output
- 0de7398 feat: add git-id, git-as, and gh-as identity management tools