Skip to content

Repository files navigation

Git-Same

Mirror your GitHub org structure to the local filesystem: parallel clone, incremental sync, CLI, TUI dashboard, and a macOS Tauri app with Finder badges and workspace folder icons.

TUI Dashboard (dark mode)
TUI Dashboard (light mode)

What It Does

+--------------------------------------+------------+------------------------------------+
│ GITHUB PLATFORM │ Sync │ LOCAL FILE SYSTEM │
│ github.com │ │ /users/m/same-github/ │
+--------------------------------------+------------+------------------------------------+
│ github.com/manuelgruber │ <<==>> │ manuelgruber/ │
│ github.com/manuelgruber/.github │ <<==>> │ manuelgruber/.github/ │
│ github.com/manuelgruber/dotfiles │ <<==>> │ manuelgruber/dotfiles/ │
+--------------------------------------+------------+------------------------------------+
│ github.com/zaai-com │ <<==>> │ zaai-com/ │
│ github.com/zaai-com/powernight │ <<==>> │ zaai-com/powernight/ │
│ github.com/zaai-com/clean-autofill │ <<==>> │ zaai-com/clean-autofill/ │
│ github.com/zaai-com/git-same │ <<==>> │ zaai-com/git-same/ │
│ github.com/zaai-com/jekyll-aeo │ <<==>> │ zaai-com/jekyll-aeo/ │
+--------------------------------------+------------+------------------------------------+
│ github.com/company1 │ <<==>> │ company1/ │
│ github.com/company1/example.ai │ <<==>> │ company1/example.ai/ │
+--------------------------------------+------------+------------------------------------+
│ 3 orgs · 7 repos │ │ 3 dirs · 7 repos │
+--------------------------------------+------------+------------------------------------+

One command discovers every repo across your GitHub orgs and mirrors them locally, cloning new repos in parallel, fetching updates for existing ones, and skipping repos with uncommitted changes. On macOS, the cask also installs Git-Same.app, FinderSync badges, and a monitor LaunchAgent so workspace status is visible in Finder.

Installation

macOS (signed + notarized cask):

brew install --cask zaai-com/tap/git-same

Linux and headless macOS (formula):

brew install zaai-com/tap/git-same-cli

The macOS cask ships the Tauri GUI app, Finder badges, monitor LaunchAgent, and CLI aliases. brew upgrade --cask git-same keeps the app and command-line tools current together.

Other installation methods

From crates.io

cargo install git-same

GitHub Releases

Download pre-built assets from GitHub Releases. Linux and headless macOS CLI builds are .tar.gz archives named git-same-<version>-<target-triple>.tar.gz (for example, git-same-3.1.0-aarch64-apple-darwin.tar.gz). macOS GUI builds are signed and notarized DMGs named git-same-<version>-<arch>.dmg.

Quick Start

Interactive (TUI)

git-same

Launches the full terminal UI with dashboard, sync, status, and workspace management, all via keyboard shortcuts.

CLI

git-same init # 1. Create user config
git-same setup # 2. Configure workspace (interactive wizard)
git-same sync # 3. Clone new repos, fetch/pull existing
git-same status # 4. Check repo status across orgs

Commands

CommandDescription
git-same initCreate config file with sensible defaults
git-same setupInteractive wizard to configure a workspace
git-same syncDiscover, clone new, fetch/pull existing repos
git-same statusShow git status across all local repos
git-same workspaceList workspaces, set default
git-same resetRemove all config, workspaces, and cache
git-same monitorRun or inspect the background status monitor
git-same refreshAsk the running monitor to rescan immediately
git-same scanDiscover repos without cloning or syncing

git-same init

Initialize git-same configuration:

git-same init [-p <config-path>] [-f | --force]

Creates a config file at ~/.config/git-same/config.toml with sensible defaults.

git-same setup

Configure a workspace (interactive wizard):

git-same setup [--name <NAME>]

Walks through provider selection, authentication, org filters, and base path.

Setup Wizard: org selection

git-same sync

Sync repositories: discover, clone new, fetch/pull existing:

git-same sync [OPTIONS]
Options:
-w, --workspace <WORKSPACE> Workspace to sync (path or unique folder name)
--pull Use pull instead of fetch for existing repos
-n, --dry-run Show what would be done
-c, --concurrency <N> Number of parallel operations (1-32)
--refresh Force re-discovery (ignore cache)
--no-skip-uncommitted Don't skip repos with uncommitted changes

Discovering repos

Sync: discovering repos

Cloning & fetching

Sync: cloning and fetching

Completed

Sync: completed

git-same status

Show status of local repositories:

git-same status [OPTIONS]
Options:
-w, --workspace <WORKSPACE> Workspace to check (path or unique folder name)
-o, --org <ORG>... Filter by organization (repeatable)
-d, --uncommitted Show only repositories with uncommitted changes
-b, --behind Show only repositories behind upstream
--detailed Show detailed status information
CLI status output

git-same workspace

Manage workspaces:

git-same workspace list # List configured workspaces
git-same workspace default [WORKSPACE] # Set default workspace (path or unique folder name)
git-same workspace default --clear # Clear default workspace

git-same reset

Remove all config, workspaces, and cache:

git-same reset [-f | --force]

git-same monitor

Run the status monitor used by the macOS Finder extension and app:

git-same monitor [OPTIONS]
Options:
--foreground Legacy flag; the monitor runs in the foreground today
--interval <SECS> Polling interval, overriding config.toml
--status Show monitor status
--stop Stop a running monitor

The Homebrew cask installs a LaunchAgent that runs the monitor for you. Non-cask installs can run git-same monitor directly when Finder badge or app status updates are needed. The older daemon subcommand remains as a compatibility alias.

git-same refresh

Ask the running monitor to rewrite Finder/app status immediately:

git-same refresh [--path <DIR>]

Use this after manually changing workspace folders, deleting repos, or debugging Finder badges. Without --path, every monitored workspace is refreshed.

git-same scan

Scan a directory tree for existing workspace markers:

git-same scan [PATH] [--depth <N>] [--register]

Use --register to add discovered workspaces to your config automatically.

Aliases

Git-Same installs multiple binary names so you can use whichever you prefer:

CommandDescription
git-samePrimary binary (always available)
gitsameNo-hyphen alias (symlink)
gitsaShort alias (symlink)
gisaShortest alias (symlink)
git sameGit subcommand (requires git-same in PATH)

Install method differences: Homebrew cask (brew install --cask zaai-com/tap/git-same) and the headless formula (brew install zaai-com/tap/git-same-cli) both install all aliases automatically. cargo install git-same installs only the primary binary.

All examples in this README use git-same, but any alias works interchangeably.

macOS App and Finder Badges

The cask installs Git-Same.app, the CLI aliases, a FinderSync badge extension, and a monitor LaunchAgent. The app reads the same config as the CLI and shows workspace status from the monitor. Finder badges use the monitor's status file, and workspace root folders get a custom Git-Same folder icon unless [ui] custom_folder_icon = false is set.

Useful checks:

gisa monitor --status # Check whether the monitor is running
gisa refresh # Force an immediate status refresh
gisa monitor --stop # Stop a running monitor

If Finder reserves badge space but no Git-Same badges render, check System Settings -> Login Items & Extensions. Google Drive's FinderSync extension can prevent peer badge images from appearing; disabling Google Drive's Finder extension has been the confirmed workaround in affected environments.

Requirements

Git-Same depends on two external tools at runtime:

  • git: Git-Same shells out to git for all repository operations (clone, fetch, pull, and status). Without it, no git operations can run.
  • gh (GitHub CLI): Git-Same calls gh auth token to obtain GitHub API tokens for repo discovery and gh api user to resolve your username. Without it, Git-Same cannot authenticate with the GitHub API.

Installing and authenticating gh

# Install GitHub CLI
brew install gh # macOS# or: sudo apt install gh # Ubuntu# Authenticate
gh auth login
# Git-Same will now use your gh credentials
git-same sync

TUI Mode

Running git-same without a subcommand launches the interactive terminal UI.

Screens

ScreenPurposeKey bindings
DashboardOverview with status tabs, search, and sync actionss: Start sync, p: Show sync progress, t: Refresh status, w: Workspaces, e/i: Settings, /: Search repositories, [←]/[→]: Switch tabs, [↑]/[↓]: Move within tab, Enter: Open selected repo folder
Workspace SelectorPick, inspect, and create workspaces[←]/[→] or Tab: Switch pane, [↑]/[↓]: Move or scroll, Enter: Select workspace or create new, d: Set default, n: New workspace, c: Expand/collapse config, f: Open folder
Setup WizardInteractive workspace configurationStep-by-step prompts for requirements, provider, authentication, orgs, path, and confirmation
Sync ProgressLive sync progress and post-sync resultsp/Esc: Hide or go back, [←]/[→]: Switch result filters when finished, [↑]/[↓]: Move or scroll, a: All, u: Updated, f: Failed, x: Skipped, c: Changelog, h: History, Enter: Expand selected repo commit detail
SettingsView requirements and adjust run optionsTab/[↑]/[↓]: Move, c: Open config folder, d: Toggle dry run, m: Toggle fetch/pull mode, Esc: Back

Examples

Sync all repositories in default workspace

git-same sync

Sync with pull mode for a specific workspace

git-same sync --workspace work --pull

Check which repositories have uncommitted changes

git-same status --uncommitted

Dry run to see what would be synced

git-same sync --dry-run

License

MIT License - see LICENSE for details

  • GitHub support
  • Parallel cloning
  • Smart filtering
  • Progress bars
  • Interactive TUI mode
  • Workspace management
  • GitLab support
  • Bitbucket support
  • Repo groups
  • Web dashboard

Building from source or contributing? See DEVELOPMENT.md.

About

Mirror GitHub structure /orgs/repos/ to local macOS file system.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages