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

Prefer an installer or a zip? Grab it from the latest release, or see every install method.

Latest release crates.io version AUR version MIT license
bash: ~/Documents
$ curl -fsSL https://raw.githubusercontent.com/Dxsk/repos-manager/main/installers/install.sh | sh
Downloading repos-manager-x86_64-unknown-linux-musl.tar.gz (latest) from github...
Installed repos-manager 1.0.0 to /home/you/.local/bin/repos-manager
 
$ repos-manager github login
? Where do you use GitHub? GitHub.com
! First copy your one-time code: XXXX-XXXX
✓ Authentication complete.
✓ Logged in as Dxsk
 
$ repos-manager sync --all
Fetching repository list from github.com...
Found 23 repositories
✓ Dxsk/git-identity-manager (updated)
✓ Dxsk/mtd (cloned)
⚠ Dxsk/infra (dirty, skipped)
Done: 1 cloned, 21 updated, 1 skipped, 0 errors
 
$ repos-manager status
Scanning repos in ~/Documents...
github.com/Dxsk/infra dirty
Total: 23 repos - 22 clean, 1 dirty

Every provider, one tool

Sync repositories from 8 providers, including several self-hosted instances per forge

github.com

GitHub

gh auth login

READY
gitlab.com

GitLab

glab auth login

READY
forgejo

Forgejo / Gitea / Gogs

tea login add

READY
bitbucket.org

Bitbucket

bitbucket auth login

BETA
radicle

Radicle

rad auth

BETA
git.sr.ht

Sourcehut

hut init

BETA
onedev

OneDev

repos-manager onedev login

BETA
plain git

Any git server

repos-manager any sync

BETA

Features

parallel.rs

Parallel sync

Clones and updates run in parallel, 4 jobs by default, more with --parallel.

status.rs

Status overview

Dirty, ahead, behind and diverged repos across every provider, in one fast scan that skips vendored trees and network mounts.

namespace.rs

Namespace mirroring

Repos land in host/owner/repo, matching the remote structure, subgroups included.

filter.rs

Filter and ignore

Pick what to sync, globally or per host, with .repos.yml glob patterns and the --filter and --ignore flags.

safety.rs

Safe by default

Dirty working copies are never touched, pulls are fast-forward only, and --prune never leaves your base directory.

hosts.rs

Self-hosted friendly

Several GitLab or Forgejo instances side by side, each synced into its own host directory.

update.rs

Self-update

repos-manager update fetches and verifies the new release, and steps aside when a package manager owns the install.

completions.rs

Shell completions

Completions for bash, zsh, fish, PowerShell and elvish, generated by the binary itself.

main.rs

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:

ToolWhat it doesReach 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. 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. 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. 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.