Skip to content

kovercc/gitor

Repository files navigation

GITOR Logo

GITOR — Git Orchestrator

Multi-repository management CLI for microservice teams.
Pull, compare, sync, and clean up dozens of repos in seconds.

CI Release License: MIT

Gitor Demo

✨ Features

  • 📊 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 filesystem errors during pull and automatically migrates the repository to the reftable backend.

📦 Installation

Option A: Standalone Binary (Recommended)

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

Option B: As a .NET Global Tool

Requires .NET 10 runtime.

dotnet tool install -g Gitor.Cli

⚡ Quick Start

# 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)

⌨️ Keyboard Shortcuts (Main Menu)

Key Action
19 Quick select menu item
0 Last item (Exit/Back)
/ or k / j Navigate
Enter Confirm
Esc or Q Back / Exit

💻 Command Line Interface (CLI)

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:

  • -g or --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).

⚙️ Configuration & Requirements

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).

🌐 Supported Git Providers

Provider PR URL Generation Tested
Azure DevOps ✅ HTTPS + SSH
GitHub ✅ HTTPS + SSH
GitLab ✅ HTTPS + SSH
Bitbucket ✅ HTTPS + SSH

🛠️ Building from Source

git clone https://github.com/kovercc/gitor.git
cd gitor
dotnet build
dotnet run --project Gitor.ConsoleApp

Publishing a native AOT binary

# 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-arm64

All AOT / self-contained / trimming settings are already configured in the .csproj.

Running Tests

dotnet test

📁 Project Structure

├── 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)

🤝 Contributing

See CONTRIBUTING.md for guidelines.

📄 License

MIT