Add git-identity: switch git author identity from a saved menu

Identities live in ~/.git-identities (alias|Name|email). Interactive
menu to select, add, or remove identities; direct mode via alias
argument; --global/-g scope flag (defaults to local inside a repo,
global fallback outside); --list/--current helpers. Full --dryrun
support and a 27-assertion test suite driven through dryrun.
GIT_IDENTITIES_FILE env override for testability.
This commit is contained in:
Paul O'Reilly
2026-08-18 20:20:45 +12:00
parent 56c621713d
commit f21506af19
4 changed files with 493 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ This project uses **spec-driven development** (OpenSpec) as a testbed for agent-
| `claude-profile` | Claude Code profile + engagement-mode launcher | Done |
| `claude-tmux` | Spawn a detached tmux Claude Code session with Remote Control, named after a project (wraps `claude-profile`) | Done |
| `gen-secret` | Generate bash/YAML/JSON-safe random strings | Done |
| `git-identity` | Switch git user.name/email from a saved identity menu (`~/.git-identities`) | Done |
| `git-status-report` | Recursive git repo status with diff stats | Done |
| `md-to-docx` | Markdown to DOCX conversion | Done |
| `mp3-to-mp4` | Convert MP3 to MP4 with a static title card | Done |
@@ -27,6 +28,7 @@ This project uses **spec-driven development** (OpenSpec) as a testbed for agent-
| `validate-skill` | Validate SKILL.md files against known Claude Code restrictions | Done |
| `semver-ci` | Compute `MAJOR.MINOR.PATCH.BUILD` from commit-message tokens, maintain `VERSION.md`, and (on main) tag/push/create a Gitea release — see [`docs/semver-ci.md`](docs/semver-ci.md) and template at [`templates/gitea-workflow-version.yml`](templates/gitea-workflow-version.yml) | Done |
| `wait-for-release` | Poll a Gitea repo's releases until a glob pattern matches or a timeout expires (default 600s) | Done |
| `wait-for-version` | Poll a Gitea repo's Actions runs until the named CI workflow completes on HEAD of main, then print the latest release tag — solves the push-then-update race condition for semver dependencies | Done |
### Engagement modes (claude-profile)