Multi-repository management CLI for microservice teams.
Pull, compare, sync, and clean up dozens of repos in seconds.
- 📊 Dashboard: See all repositories at a glance: current branch, dirty/clean state, ahead/behind counts.
- ⬇️ Pull All: Fetch and pull every repository in parallel with one keypress.
- 🔀 Checkout Branch: Switch all repositories to a branch simultaneously. Dirty repos are safely skipped.
- 🔍 Compare Branches: Bidirectional branch comparison inside the console: commit logs, per-file stats with visual change bars, and inline colored diffs.
- 🔄 Deep Compare & Sync: Detect real file differences that git may miss after squash merges. Creates worktrees (no re-clone needed), shows a filesystem-level preview, opens your diff tool (WinMerge, Beyond Compare, Meld, KDiff3, P4Merge, DiffMerge, or VS Code), then commits, pushes, and opens a PR.
- 🏗️ PR Creation: Supports Azure DevOps, GitHub, GitLab, and Bitbucket. Opens the "Create PR" page in your browser with source and target branches pre-filled.
- 🧹 Cleanup Gone Branches: Automatically deletes local branches whose remote tracking branch has been removed.
- 📁 Repository Groups: Organize repos into virtual folders (Frontend, Backend, etc.) for quick filtering.
- 💻 Git Shell: Interactive git-only shell scoped to a selected repository.
- 🛠️ Case-Sensitivity Auto-Fix: Detects
case-insensitive filesystemerrors during pull and automatically migrates the repository to the reftable backend.
Native AOT binary — no .NET runtime required. Download, add to PATH, and run gitor.
| Platform | Download |
|---|---|
| Windows x64 | gitor-win-x64.exe |
| Linux x64 | gitor-linux-x64 |
| macOS ARM (M1+) | gitor-osx-arm64 |
Requires .NET 10 runtime.
dotnet tool install -g Gitor.Cli# First run — the setup wizard will guide you
gitor
# Option A: scan an existing folder with repos
> Choose setup mode: Scan existing folders
> Enter root folder path: C:\Projects
# Option B: clone from a list of URLs
> Choose setup mode: Clone repositories from URLs
> Where to create repositories folder?: C:\Work
> (paste URLs, one per line, then press Enter on empty line)| Key | Action |
|---|---|
1–9 |
Quick select menu item |
0 |
Last item (Exit/Back) |
↑ / ↓ or k / j |
Navigate |
Enter |
Confirm |
Esc or Q |
Back / Exit |
While running gitor opens the interactive dashboard, you can also use CLI commands for specific operations.
Add the --help flag to any command for more details.
Available Commands:
gitor status— Show repository status table and exit.gitor pull— Pull all repositories.gitor checkout <branch>— Checkout a specific branch in all repositories.gitor compare <branchA> <branchB>— Non-interactive deep compare between two branches.gitor prune— Delete local branches whose remote tracking branch has been deleted.
Global Options:
-gor--group <GROUP>— Filter repositories by a specific group defined in configuration. Can be used with any of the above commands (e.g.,gitor pull -g Backend).
Requirements:
- .NET 10 SDK (only for building from source)
- git 2.37+ must be available in
PATH - For Deep Compare: an external diff tool is recommended.
Storage:
- Config is stored in
%APPDATA%/Gitor/config.json(Windows) or~/.config/Gitor/config.json(Linux/macOS). - Logs are written to
%APPDATA%/Gitor/logs/with daily rotation (7 days retained).
| Provider | PR URL Generation | Tested |
|---|---|---|
| Azure DevOps | ✅ HTTPS + SSH | ✅ |
| GitHub | ✅ HTTPS + SSH | ✅ |
| GitLab | ✅ HTTPS + SSH | ✅ |
| Bitbucket | ✅ HTTPS + SSH | ✅ |
git clone https://github.com/kovercc/gitor.git
cd gitor
dotnet build
dotnet run --project Gitor.ConsoleApp# Windows
dotnet publish Gitor.ConsoleApp -c Release -r win-x64
# Linux
dotnet publish Gitor.ConsoleApp -c Release -r linux-x64
# macOS Apple Silicon
dotnet publish Gitor.ConsoleApp -c Release -r osx-arm64All AOT / self-contained / trimming settings are already configured in the
.csproj.
dotnet test├── Gitor.Core/ # Domain: models, interfaces, helpers (zero dependencies)
│ ├── Configuration/ # UserConfig, DiffToolSettings, RepositoryGroup, GitProvider
│ ├── Entities/ # GitRepository
│ ├── Exceptions/ # GitException, GitErrorCode
│ ├── Helpers/ # PR URL builders, GitUrlValidator, FileSystemDiffHelper
│ ├── Interfaces/ # IGitService, IDiffService, IUserConfigService, ...
│ └── Models/ # BatchResult, CommitInfo, DiffStat, DiffLine, FileSystemDiffResult
│
├── Gitor.Infrastructure/ # Git CLI wrapper, file-based config, diff tool launcher
│ ├── Constants/ # GitConsts, DiffToolConsts
│ └── Services/ # CliWrapGitService, ConfigurableDiffService, FileUserConfigService, ...
│
├── Gitor.ConsoleApp/ # Spectre.Console UI, workflows, DI composition root
│ ├── UI/ # ConsoleTheme, DiffRenderer, GroupedMenu, BranchHelper, LogoRenderer
│ ├── Workflows/ # SetupWorkflow, NavigationWorkflow, CompareWorkflow, MaintenanceWorkflow
│ └── Constants/ # AppConsts, MenuDefinitions, Enums
│
└── Gitor.Tests/ # Unit tests (xUnit)
See CONTRIBUTING.md for guidelines.
