Files
claudetools/.claude/skills/gitea/SKILL.md
Mike Swanson 354754e5df feat: add gitea skill for bulletproof git/submodule operations
Comprehensive git/Gitea operations skill extracting battle-tested patterns from
sync.sh into reusable commands for the fleet. Makes submodule management,
status checks, and common git operations bulletproof across all machines.

Core features:
- Submodule operations: init, update, sync, status, fix
- Repository operations: status, health, fetch, pull, push, commit
- Utilities: verify-identity, inject-creds
- Auto-fixes: collision resolution, detached HEAD recovery, identity reconciliation
- Proper error handling with meaningful exit codes

Key fixes from sync.sh patterns:
- Credential injection from parent to submodules
- Untracked file collision resolution (preserves content)
- Identity reconciliation from identity.json
- Graceful degradation for transient failures

Usage examples:
  bash .claude/skills/gitea/scripts/gitea.sh submodule fix projects/radio-show
  bash .claude/skills/gitea/scripts/gitea.sh health
  bash .claude/skills/gitea/scripts/gitea.sh status --verbose

This fixes the radio-show submodule issue and provides tools for future git
operations without manual intervention.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-06-20 08:44:47 -07:00

139 lines
6.0 KiB
Markdown

---
name: gitea
description: >
Comprehensive git/Gitea operations for ClaudeTools fleet: submodule management
(init/update/sync/fix), status checks, commit/push/pull with proper error handling,
credential injection, identity reconciliation. Makes sync/save bulletproof across all
machines. Triggers: git submodule, gitea, fix submodule, git sync, submodule issues,
clone repo, git status, repo health.
---
# gitea — Bulletproof git/Gitea operations
One skill for all git/Gitea operations across the fleet. Encapsulates the patterns from
`sync.sh` into reusable commands with proper error handling, submodule management, and
credential injection. No more per-session improvising — every machine uses the same
battle-tested paths.
## Core commands
```bash
# Submodule operations
bash .claude/skills/gitea/scripts/gitea.sh submodule init [PATH] # Init one or all submodules
bash .claude/skills/gitea/scripts/gitea.sh submodule update [PATH] # Update to pinned commit
bash .claude/skills/gitea/scripts/gitea.sh submodule sync [PATH] # Fetch + advance to remote tip
bash .claude/skills/gitea/scripts/gitea.sh submodule status # Show all submodule status
bash .claude/skills/gitea/scripts/gitea.sh submodule fix [PATH] # Auto-fix common issues
# Repository operations
bash .claude/skills/gitea/scripts/gitea.sh status [--verbose] # Repo + submodule status
bash .claude/skills/gitea/scripts/gitea.sh fetch [--recurse] # Fetch from origin
bash .claude/skills/gitea/scripts/gitea.sh pull [--recurse] # Pull with rebase
bash .claude/skills/gitea/scripts/gitea.sh push # Push to origin
bash .claude/skills/gitea/scripts/gitea.sh commit "<msg>" # Commit staged changes
# Health & diagnostics
bash .claude/skills/gitea/scripts/gitea.sh health # Full repo health check
bash .claude/skills/gitea/scripts/gitea.sh verify-identity # Check git identity
bash .claude/skills/gitea/scripts/gitea.sh inject-creds # Inject parent creds to subs
```
## What it handles for you
### Submodule management
- **Init with credential injection** — inherits HTTPS credentials from parent `origin` URL
- **Collision detection** — moves aside untracked files that block checkout (preserves content)
- **Identity reconciliation** — sets git user.name/email from identity.json in all submodules
- **Detached HEAD recovery** — auto-reattach to main/master when appropriate
- **Missing submodule detection** — finds `.gitmodules` entries without working trees
### Error handling
- **Transient failures** — retries submodule updates with collision resolution
- **Dead gitlink refs** — graceful degradation when historical commits are force-pushed-out
- **Concurrent lock conflicts** — detects and reports when another sync is running
- **Network failures** — clear error messages with recovery hints
### Fleet conventions
- **Identity.json reconciliation** — forces git config to match on every operation
- **Selective submodule advance** — respects pinned-commit-lagging-main pattern unless opted in
- **Windows path cruft** — detects and warns about garbled path-as-filename issues
- **Credential reuse** — HTTPS auth from parent propagates to all submodules
## Common workflows
### Fix a broken submodule
```bash
# Single command — detects and fixes: missing init, detached HEAD, collisions, stale pointers
bash .claude/skills/gitea/scripts/gitea.sh submodule fix projects/radio-show
```
This is what you needed for `radio-show` — one command instead of manual `git submodule update --init`.
### Check health before sync
```bash
# Catches: stale identity, missing submodules, uncommitted changes, detached HEADs, dead refs
bash .claude/skills/gitea/scripts/gitea.sh health
```
### Safe submodule advance (opt-in)
```bash
# Fetch + ff-merge all submodules to their remote tips (sync.sh --with-submodules equivalent)
bash .claude/skills/gitea/scripts/gitea.sh submodule sync
```
### Status across everything
```bash
# Parent + all submodules in one view (colored, formatted)
bash .claude/skills/gitea/scripts/gitea.sh status --verbose
```
## When to use each command
| Command | When to use | What it does |
|---------|------------|--------------|
| `submodule init` | Fresh clone, missing submodule | Register + populate at pinned commit |
| `submodule update` | After parent pull, pointer changed | Checkout to pinned commit |
| `submodule sync` | Want latest upstream (opt-in) | Fetch + advance to remote tip |
| `submodule fix` | Any submodule issue | Detect + auto-fix common problems |
| `submodule status` | Check what's going on | Show all submodules + state |
| `status` | Quick health check | Parent + subs, uncommitted changes |
| `health` | Pre-sync validation | Full diagnostic scan |
| `fetch` | Inspect before pull | Get remote refs, no merge |
| `pull` | Sync from remote | Fetch + rebase + update subs |
| `push` | Publish local work | Push to origin/main |
## Integration with sync.sh
`sync.sh` already implements most of this internally. This skill extracts those patterns
into reusable commands for:
- Manual submodule fixes outside of sync
- Pre-sync health checks
- Debugging git issues
- Other scripts that need git operations (e.g., backup, deployment)
You can refactor `sync.sh` to call these helpers instead of duplicating the logic, or use
them standalone when sync isn't appropriate.
## Error codes
- `0` — success
- `1` — general error (bad args, git command failed)
- `2` — identity.json missing or unreadable
- `3` — not a git repo
- `75` — lock contention (another sync running)
## Notes
- All submodule operations reconcile git identity from `.claude/identity.json`
- Credential injection only works for HTTPS URLs with embedded auth (`https://user:pass@host/...`)
- The `--recurse` flag on fetch/pull is opt-in (default: no submodule recursion)
- Health check output is colored (green=ok, yellow=warning, red=error) and machine-parseable
- All commands are idempotent and safe to re-run