Mirror any Git repository to any other Git repository, automatically — from your Mac.
GitRelay is a native macOS app that manages one-way mirror syncs between Git hosting platforms. Point it at a source and a destination, choose a schedule, and it handles the rest: git clone --mirror, git fetch --prune, git push --mirror, all running quietly in the background while you work.
It supports any combination of GitLab, GitHub, Gitea, Gitee, Bitbucket, or self-hosted Git servers — SSH Agent, SSH key, and HTTPS token auth included.
- Multi-repo sidebar — manage any number of repo pairs from one window
- Full mirror sync — all branches and tags, one direction, src → dst
- Destructive push protection — dry-runs mirror pushes and blocks target ref deletes or forced updates by default
- Sync health dashboard — sidebar and menu bar summaries for today's success, failure, and not-run counts
- Scheduled sync — per-repo frequency: manual, 15 min, 30 min, 1 h, 1 day
- Auth flexibility — SSH Agent, SSH key path, or HTTPS token (stored in macOS Keychain)
- Menu bar quick access — status at a glance, trigger sync without opening the main window
- Sync log — per-run log with credential redaction and error classification
- Commit delta — shows how many commits src is ahead of dst before each push
- macOS 14 (Sonoma) or later
- Apple Silicon or Intel
gitinstalled (/usr/bin/git,/usr/local/bin/git, or/opt/homebrew/bin/git)
brew tap yangflow/tap
brew install --cask gitrelayGo to Releases and download the latest GitRelay-x.y.z.dmg. Open it and drag GitRelay to Applications.
Unsigned build: right-click → Open on first launch, or run
xattr -cr /Applications/GitRelay.app
git clone https://github.com/yangflow/gitrelay.git
cd gitrelay
open gitrelay.xcodeprojSelect the gitrelay scheme, press ⌘R.
- Click + in the toolbar or the empty-state button to add a repo pair.
- Enter a name, the source URL, and the destination URL.
- Choose the auth method for each side — SSH Agent requires no extra setup if
ssh-agentis already running. - Set a sync frequency and click Add.
- GitRelay clones the source as a bare mirror on first sync, then fetches and pushes on every subsequent run.
The menu bar icon shows aggregate status: a warning triangle if any repo has a sync failure.
| What | Where |
|---|---|
| Repo configs | ~/.local/share/gitrelay/repos.json |
| Mirror clones | ~/.local/share/gitrelay/mirrors/<uuid>/ |
| HTTPS tokens | macOS Keychain |
The icon PNGs are generated by a Swift script and committed to the repo. To regenerate them (e.g. after a palette change):
swift scripts/generate-icon.swiftMIT — see LICENSE.