Autogitter
Git repository synchronization tool for managing multiple repos across providers
Documentation •
Installation •
Quick Start •
Features
Features
| Feature |
Description |
| Multi-Provider |
GitHub, Gitea, and Bitbucket (Cloud + Server) |
| Sync Strategies |
manual (explicit list), all (fetch from API), regex (pattern matching) |
| Parallel Operations |
Clone and pull with configurable worker pools |
| Remote Configs |
Load config from HTTP/HTTPS URLs or SSH paths |
| Dry Run |
Preview changes before applying them |
| Interactive CLI |
Beautiful diffs, prompts, and progress indicators |
| Per-Repo Paths |
Override clone destination for individual repos |
| SSH Options |
Custom ports and private keys per source |
Installation
From Releases (Recommended)
Download the latest binary from the releases page.
# Linux (amd64)
curl -L https://github.com/arch-err/autogitter/releases/latest/download/ag-linux-amd64 -o ag
chmod +x ag
sudo mv ag /usr/local/bin/
# macOS (Apple Silicon)
curl -L https://github.com/arch-err/autogitter/releases/latest/download/ag-darwin-arm64 -o ag
chmod +x ag
sudo mv ag /usr/local/bin/
# Windows - download ag-windows-amd64.exe from releases
From Source
go install github.com/arch-err/autogitter/cmd/ag@latest
Quick Start
1. Set up authentication (for all/regex strategies):
ag connect
2. Create your config:
ag config
This opens your config in $EDITOR. Example configuration:
sources:
# Sync all repos from a GitHub user
- name: "GitHub"
source: github.com/your-username
strategy: all
local_path: "~/Git/github"
# Sync specific repos manually
- name: "Work"
source: gitea.company.com/myteam
strategy: manual
local_path: "~/Git/work"
repos:
- myteam/project-alpha
- myteam/project-beta
- name: myteam/tmux-conf # override clone destination
local_path: "~/.config/tmux"
# Sync repos matching a pattern
- name: "APIs"
source: github.com/myorg
strategy: regex
local_path: "~/Git/apis"
regex_strategy:
pattern: "^myorg/api-.*"
3. Sync your repositories:
ag sync
4. Keep repos updated:
ag pull
Usage
# Show diff between local repos and config
ag diff
# Sync repositories (clone new, detect orphaned)
ag sync
# Preview what would happen
ag sync --dry-run
# Sync with 8 parallel workers
ag sync -j 8
# Prune repos not in config
ag sync --prune
# Pull updates for all repos
ag pull
# Edit config
ag config
# Validate config
ag config --validate
# Generate config template to stdout
ag config --generate > config.yaml
# Use a remote config
ag sync -c https://example.com/config.yaml
ag sync -c user@host:/path/to/config.yaml
Providers
| Provider |
Host Detection |
Token Env Var |
| GitHub |
github.com |
GITHUB_TOKEN |
| Gitea |
Custom hosts |
GITEA_TOKEN |
| Bitbucket |
bitbucket.org or custom |
BITBUCKET_TOKEN |
For self-hosted instances, specify the type field explicitly:
- name: "Self-hosted Gitea"
source: git.company.com/user
type: gitea # explicit type
strategy: all
local_path: "~/Git/company"
Documentation
Full documentation available here.
Built With
- Go - Programming language
- Cobra - CLI framework
- Charm - Terminal UI libraries (Huh, Lip Gloss, Log)
- Claude Code - AI pair programming
License
MIT License - see LICENSE for details.