| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A CLI tool for managing multiple Git repositories as a unified workspace. Define your repos in gitjoin.txt files, and Gitjoin will clone, pull, and prune them for you.
Install via:
go install github.com/bep/gitjoin@latest
If you have hundreds of Git repositories across different technologies and domains, keeping them in separate repositories makes sense — until you need to operate on or configure all (or a subset) of them as a whole.
Examples:
Tip
grrep works great with Gitjoin as it understands its boundaries.
Git Submodules track a specific commit in each sub-repo and embed that reference in the parent. This is the right tool when you need a pinned, reproducible dependency tree — but it's the wrong tool when your goal is a workspace of independent repos you want to keep up to date.
Gitjoin treats the listed repos as peers, not dependencies:
If you need version-pinning, use submodules. If you need a convenient umbrella for many repos you actively develop, Gitjoin is a better fit.
.
├── go
│ ├── AGENTS.md
│ ├── apps
│ │ └── gitjoin.txt
│ ├── firstup.env
│ └── libs
│ └── gitjoin.txt
└── sites
├── AGENTS.md
├── firstup.env
└── gitjoin.txt
Running gitjoin from the workspace root syncs all repositories defined in gitjoin.txt files recursively: clones missing repos, pulls updates for existing ones, and removes repos no longer listed. Note that you can start at any subdirectory with a gitjoin.txt to sync just that subtree.
| Flag | Description |
|---|---|
| --force | Force sync (see below) |
| --quiet | Suppress output |
| Condition | Action |
|---|---|
| Repo on non-default branch | Skip, warn in summary |
| Repo with uncommitted changes | Skip, warn in summary |
| Clean repo on default branch | Pull |
For repos that would normally be skipped:
If unstash fails due to conflicts, warn and leave stash intact.
| Back | FazBrowse Home | New Git URL |