About this project

# manygit — A Multi-Repository Git CLI Manager manygit is a single CLI tool that brings a lazygit-style terminal UI to a whole **tree** of git repositories. Point it at a folder, and every repo underneath appears on one screen, showing its branch and whether it's ahead, behind, or dirty. You can fetch, pull, push, or switch branches on the highlighted repo, plus view a commit graph, run scripts, and browse GitHub pull requests (when the `gh` CLI is installed). Unlike batch runners like `gita` or `mani`, there's no config file to register repos in and no output to read back: manygit discovers them by walking the folder, and you stay in the list. ## Key Features - **Automatic discovery**: Scans a folder (default depth 3) for git repos and groups them by parent directory. - **Unified status view**: See branch, ahead/behind counts, dirty state, and local-only repos at a glance. - **Direct actions**: Sync (fetch + fast-forward pull), push, checkout branches, discard changes (with confirmation), fetch one or all repos. - **Commit graph**: Full-screen visualization of commit history. - **Script runner**: Define and run scripts across repos. - **GitHub PRs pane**: Lists your open PRs and review requests (requires `gh` CLI), with one-key checkout of a PR's branch. - **Plain-English git**: Type requests like "rebase current onto master" and an AI harness converts them to git commands for your confirmation. - **In-repo shell**: Open a persistent shell prompt in the highlighted repo to run arbitrary commands. - **Filtering**: Filter repos by name, branch, or tag; show only repos with changes/ahead/behind. - **Themes**: Multiple color themes (default, serika_dark, dracula, nord, catppuccin, 8008). - **Self-updating**: Built-in updater with changelog display. ## Installation **Linux** ```bash curl -fsSL https://raw.githubusercontent.com/rabeeh-ta/manygit/main/install.sh | bash ``` **macOS** ```bash brew tap rabeeh-ta/manygit && brew trust rabeeh-ta/manygit && brew install manygit ``` **Windows (PowerShell)** ```powershell irm https://raw.githubusercontent.com/rabeeh-ta/manygit/main/install.ps1 | iex ``` Other methods: `go install github.com/rabeeh-ta/manygit@latest` (Go 1.24+), or build from source. Pin a specific version by passing the tag to the installer (e.g., `bash -s -- v1.0.7`). ## Usage ```bash manygit # scan the current directory manygit --root ~/work # scan a specific folder manygit stats # print GitHub download stats ``` ## Key Bindings (Summary) - `1`-`7`: Focus panes (Repos, Scripts, Branches, PRs, Graph, Changes, Output) - `j`/`k`: Move within focused panel - `enter`: Context-dependent (view branches, checkout, run script, checkout PR branch) - `s`/`p`: Sync (fetch + ff-pull) / push highlighted repo - `d`/`D`: Discard changes (tracked only / also untracked) - `f`/`r`: Fetch one / refetch all - `g`: Full-screen commit graph - `n`: Full-screen news feed (AI-summarized headlines) - `t`: Toggle latest tag display - `F`: Filter to repos with changes/ahead/behind - `/`: Filter lists (repos match name and branch; branches match name; scripts match name) - `:`: Plain-English git commands via AI harness - `!`: Open shell in highlighted repo - `o`: Open repo in editor - `z`: Zoom focused pane - `esc`: Back out one layer of state - `?`: Help overlay (keybindings and settings) - `q` or `esc esc`: Quit ## Configuration Optional config at `~/.config/manygit/config.yml`: ```yaml max_depth: 3 # folders below root to search (1-5) open_cmd: code # editor command for `o` theme: default # default | serika_dark | dracula | nord | catppuccin | 8008 status_glyphs: unicode # or "ascii" ``` ## Safety - manygit never writes to the launch folder. - On its own, it never force-pushes, merges, or rebases; `s` is fetch + fast-forward-only pull, `p` is plain push. - The only destructive action it offers on its own is discarding changes (`d`/`D`), which always asks for confirmation. - The `!` shell and `:` AI commands are deliberate exceptions, with safeguards: commands are shown before running, git is executed with argument lists (no shell pipes), and dangerous flags are refused. ## Releasing (Maintainer) Push a version tag (e.g., `git tag v0.2.0 && git push origin v0.2.0`) — GitHub Actions builds binaries and publishes the release; the installer and self-updater pick it up automatically. Release notes become the in-app changelog. ## Try It Online A working port of the TUI runs on the [landing page](https://rabeeh-ta.github.io/manygit/) — the git is fake, but the keys are real.