install
source · Clone the upstream repo
git clone https://github.com/TaylorHuston/local-life-manager
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/TaylorHuston/local-life-manager "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/git-sync" ~/.claude/skills/taylorhuston-local-life-manager-git-sync && rm -rf "$T"
manifest:
.claude/skills/git-sync/SKILL.mdsource content
/git-sync
Synchronize all git repositories: the top-level
my-life repo and the spaces/ projects.
Usage
/git-sync # Check status of all repos and branches /git-sync --pull # Pull updates for all branches /git-sync --push # Push local commits for all branches /git-sync --clone # Clone missing repos
Implementation
This skill uses a Python script for reliable validation:
python .claude/skills/git-sync/scripts/sync.py --check # Status report python .claude/skills/git-sync/scripts/sync.py --pull # Pull behind branches python .claude/skills/git-sync/scripts/sync.py --push # Push ahead branches python .claude/skills/git-sync/scripts/sync.py --clone # Clone missing repos python .claude/skills/git-sync/scripts/sync.py --json # JSON output python .claude/skills/git-sync/scripts/sync.py --suggest-additions # YAML for untracked repos
Run the script from the my-life repo root directory.
What It Validates
Top-Level Repo (my-life)
- Branch status (ahead/behind/dirty/diverged)
- Uncommitted changes
- Sync status with remote
Index → Filesystem
- Each project with
path exists in spaces/code: - Git remote matches
in indexremote: - Branch status (ahead/behind/dirty/diverged)
Filesystem → Index
- Finds repos in spaces/ not listed in CLAUDE.md
- Suggests YAML to add them with
--suggest-additions
Report Format
============================================================ GIT SYNC REPORT ============================================================ ## Top-Level Repo (my-life) my-life (1 branch) ✓ main - Up to date ## Issues missing-repo Status: missing Directory does not exist Remote: https://github.com/user/repo.git ## Repositories coordinatr (2 branches) ✓ main - Up to date ↑ feature/001 - 3 commits to push yourbench (1 branch) ! main - 2 uncommitted files ## Not in Index ? django-tutorial Path: spaces/django-tutorial Remote: https://github.com/user/django-tutorial.git ------------------------------------------------------------ SUMMARY ------------------------------------------------------------ Top-level repo: 1 (main: up to date) Indexed repos: 15 (14 ok, 1 missing) Remote-only: 6 Not in index: 2 Branches ahead: 1 Branches behind: 0 Branches dirty: 1 Branches diverged:0 Local-only: 0
Status Symbols
| Symbol | Meaning |
|---|---|
| ✓ | Up to date |
| ↓ | Behind remote (can pull) |
| ↑ | Ahead of remote (can push) |
| ↕ | Diverged (manual merge needed) |
| + | Local only (no remote tracking) |
| ? | Not in index |
| ! | Dirty (uncommitted changes) |
| ✗ | Error (check manually) |
Safety
- Never force push - if diverged, report and let user handle
- Never auto-commit - dirty repos are reported, not modified
- Fetch before status - ensure latest remote info
- Fast-forward only - pulls fail safely if not fast-forward
- Skip dirty branches - don't pull if uncommitted changes
Adding Repos to Index
Use
--suggest-additions to get YAML:
python .claude/skills/git-sync/scripts/sync.py --suggest-additions
Output:
# Add to CLAUDE.md Projects Index: - name: django-tutorial code: spaces/django-tutorial/ remote: https://github.com/user/django-tutorial.git branch: main status: active # or: on-hold, archived, experiment
Error Handling
| Error | Resolution |
|---|---|
| Clone fails | Check network, SSH keys, permissions |
| Remote mismatch | Update CLAUDE.md or fix remote |
| Diverged branches | Manual merge/rebase required |
| Missing remote | Repo may be local-only, skip sync |