repos-manager
One CLI to sync them all. Clone, update and keep an eye on every Git repository you can access, across every forge.
Linux · macOS · Windows · single native binary
$curl -fsSL https://raw.githubusercontent.com/Dxsk/repos-manager/main/installers/install.sh | sh PS>irm https://raw.githubusercontent.com/Dxsk/repos-manager/main/installers/install.ps1 | iex $yay -S repos-manager-bin $cargo install repos-manager Prefer an installer or a zip? Grab it from the latest release, or see every install method.
Every provider, one tool
Sync repositories from 8 providers, including several self-hosted instances per forge
GitHub
gh auth login
READYGitLab
glab auth login
READYForgejo / Gitea / Gogs
tea login add
READYBitbucket
bitbucket auth login
BETARadicle
rad auth
BETASourcehut
hut init
BETAOneDev
repos-manager onedev login
BETAAny git server
repos-manager any sync
BETAFeatures
Parallel sync
Clones and updates run in parallel, 4 jobs by default, more with --parallel.
Status overview
Dirty, ahead, behind and diverged repos across every provider, in one fast scan that skips vendored trees and network mounts.
Namespace mirroring
Repos land in host/owner/repo, matching the remote structure, subgroups included.
Filter and ignore
Pick what to sync, globally or per host, with .repos.yml glob patterns and the --filter and --ignore flags.
Safe by default
Dirty working copies are never touched, pulls are fast-forward only, and --prune never leaves your base directory.
Self-hosted friendly
Several GitLab or Forgejo instances side by side, each synced into its own host directory.
Self-update
repos-manager update fetches and verifies the new release, and steps aside when a package manager owns the install.
Shell completions
Completions for bash, zsh, fish, PowerShell and elvish, generated by the binary itself.
Single native binary
Native builds for Linux (static), macOS and Windows, on x86_64 and ARM64. Only git and your forges' CLIs are needed.
Why repos-manager?
Your code lives on more forges and accounts than you can keep track of. repos-manager keeps a local, up-to-date copy of all of it, so you can work instead of hunting for repos.
Everything, in one command
Your own repos, your organizations and the projects you collaborate on, across every forge and account. One sync --all, no list of URLs to maintain.
Your work stays safe
These are the clones you work in. Updates are fast-forward only, local changes are never touched, and status tells you what is still unpushed.
Small forges welcome
GitHub and GitLab, but also Forgejo, Gitea, Gogs, Bitbucket, Radicle, Sourcehut, OneDev and plain git servers with no API at all, and as many self-hosted instances as you run, each in its own folder.
How it compares
Great tools already exist around Git repositories. Each one is built for a different job:
| Tool | What it does | Reach for it when |
|---|---|---|
| repos-manager this tool | Discovers every repository you can access on each forge, clones what is missing, fast-forwards the rest and reports what needs attention. | You work across several forges or accounts and want all of it on disk, current, every day. |
| ghq | Clones repositories from their URL into a tidy, predictable directory tree. | You clone projects one at a time and want them organized the same way. |
| ghorg | Clones all the repositories of one organization or user in a single run. | You need a whole organization locally, for onboarding, audits or searching through code. |
| gickup | Backs repositories up and mirrors them to other hosts or storage. | You want backups or mirrors of your repositories, typically on a schedule. |
They are not mutually exclusive: back up with gickup, and keep working copies with repos-manager.
Quick start
Installed with one of the commands above? Three commands and you are done.
- 1
Log in to your forges
Runs each installed provider CLI's login, or a single one with
repos-manager github login.$ repos-manager login - 2
Sync everything
Clones what is missing and updates the rest into
~/Documents/<host>/<owner>/<repo>. Preview first with--dry-run.$ repos-manager sync --all - 3
Check what needs attention
Lists dirty, ahead, behind and diverged repos, so nothing stays unpushed.
$ repos-manager status
Next: configure base directory and hosts, filter what gets synced, or set up shell completions.