The bridge across repositories
Why?
- Have a bunch of repos you maintain?
- Do you jump around them a bunch?
- Wish you could get a bird’s eye view of all of them?
- Are some dependent on others?
If any one of those answers is a “yes” I suggest you check out arc.
Install
Linux (musl amd64 / arm64):
curl -fsSL https://gitlab.com/ballast-dev/arc/-/raw/main/install/get_arc.sh | shOr download arc-linux-amd64 / arc-linux-arm64 from releases.
macOS and Windows binaries are not published from CI; build from source with cargo build --release.
Features:
- Multi-repo workspace — manage many git repos from one
arc.toml - TOML config — per-repo
path,url, requiredremote, anddependencies - Config discovery — walks up from CWD for
arc.toml, or--config <PATH>(file or directory) - Paths next door or below
arc.toml— relative descendants or absolute;..is skipped with a warning - Per-repo remotes — each repo names the remote used for fetch/reset/default-branch
- Dependency-aware checkout —
arc checkoutis status for CWD + deps;arc checkout BRANCHaligns that tree (git checkout --track). A dep without BRANCH stays on HEAD or its default branch.--repo PATHselects another tree from any CWD. - Bird’s-eye status — ahead/behind, dirty/staged/untracked markers;
-vfor file detail;--fetchto refresh - Terminal-aware layout — path columns pad when wide, truncate with
..when narrow - Bulk pull / fetch / sync — across every configured repo
- Clone — clone all repos from config; skips worktrees that already exist
- Init — write a starter
arc.toml(arc init [PATH]) - Reset — hard reset to
{remote}/<default>;-y/--yesskips the prompt;-s/--sanitizeclears the index cache - Cross-repo shell —
-c <cmd>...runs any command in every repo - Cross-repo git —
-g <args>...runsgit …in every repo --only PATH [PATH...]— exactpathvalues fromarc.toml--sort— alphanumeric bypath(default: listed order inarc.toml)--jobs N/-j— parallel work (default: CPU count). Streaming commands prefix lines like Compose (name | …). Use--jobs 1if git asks for credentials.- Show config — pretty-print loaded repos, URLs, and deps
- Completions —
arc completions bash|zsh|fish - Live config — re-read
arc.tomlevery run
NOTE: arc anchors on the location of
arc.toml(or the path given by--config). Barearcrunsstatus.
USAGE:
arc [OPTIONS] [SUBCOMMAND]
OPTIONS:
--config <PATH> Path to arc.toml or the directory that contains it
--only <PATH>... Only these repo paths (exact match)
--repo <PATH> Select a repo by exact path (checkout tree root)
--sort Alphanumeric by path (default: arc.toml order)
-j, --jobs <N> Parallel jobs (default: CPU count)
--color <WHEN> auto | always | never (also honors NO_COLOR)
-c <COMMAND>... Invoke any command across all repos
-g <COMMAND>... Invoke any git command across all repos
-h, --help Print help
-V, --version Print version
SUBCOMMANDS:
checkout Tree status (no args) or align CWD/deps onto BRANCH
clone Clone all repos defined in arc.toml
completions Generate shell completions
fetch Fetch from each repo's configured remote
help Print this message or the help of the given subcommand(s)
init Write a starter arc.toml to cwd or PATH
pull Fetch and merge on current branch
reset Reset worktree to remote default branch (-s/--sanitize, -y/--yes)
show Display current configuration
status Show status of all repos (-v/--verbose, --fetch)
sync Checkout default branch and pullCredential Manager
Pick your poison
-
Windows
- install the latest Git Credential Manager
-
Linux/Mac
git config —global credential.helper cache git config —global credential.helper “store —file=~/.my-credentials”
-
The credential helper command will store credentials for 15 mins. Passing the
--fileargument will store your credentials permanently, however they are in plain text. For more info look at the git-docs
Example:
[[repo]]
path = "path/arc"
url = "http://domain"
remote = "origin"
dependencies = []
[[repo]]
path = "path/other"
remote = "upstream"
url = "http://other.domain"
dependencies = ["path/arc"]Workflow
Along with easing development by automating synchronization of the entire project, arc can prove useful as a workflow tool. Developers working on a project push to their specific branches and send a merge request to the maintainer when the issue is complete.