A terminal UI for monitoring multiple git repositories simultaneously.
See docs/features.md for the full feature reference.
- Live status for all tracked repos in a single table
- current branch, ahead/behind upstream and trunk
- change counter: staged / conflict / modified / deleted / untracked
- Background git operations: fetch, pull, push, force-push, checkout, create & delete branch
- Fetch all repos in parallel (
Alt-f) - Status Details pane — per-file change list with priority sorting and scroll indicators
- Commit History pane — full log or filtered ahead/behind upstream & trunk; file sub-rows per commit;
,/.jump between commits - Details pane — diff of selected file, or full commit details (hash, author, change summary, word-wrapped message) with position indicator
- Output Log pane — timestamped, severity-coloured git command output with auto-follow
- Per-file actions: stage, unstage, revert, discard
- Branches pane — full list of local and remote-only branches with ahead/behind counts; direct checkout and branch action menu
- Help overlay (
?) — Show available keybindings - Custom repo commands configurable per project
- File-system watcher for instant refresh (no polling)
- Persistent repo list and pane state across sessions
Requirements: Rust toolchain (stable, 1.70+)
git clone <repo-url>
cd gitover-rust-tui
cargo build --releaseThe binary is at target/release/gitover. Copy it anywhere on your PATH:
cp target/release/gitover ~/.local/bin/gitoverOr build and install in one step:
make installOr install directly from the remote git repo:
cargo install --git https://github.com/manuel-koch/gitover-rust-tuiConfig file lookup: searches for gitover.config.yaml starting from the current working directory,
walking up to the filesystem root; falls back to ~/.config/gitover/config.yaml.
A missing file is valid — defaults are used.
general:
git: /usr/local/bin/git # optional: override git executable path
auto_fetch_interval: 600 # seconds between background fetches (0 = disabled)
debug_log: ~/logs/gitover.log # optional: persistent debug log (supports ~ and ${VAR})
repo_commands:
- name: Open in editor
cmd: code ${ROOT} # ${ROOT} and ${BRANCH} are repo vars; ${HOME} etc. are env vars
background: trueState (repo list, pane visibility) is saved automatically to ~/.config/gitover/state.yaml
(or a gitover.state.yaml found by the same CWD-walk).
gitover [--config <path>] [--state <path>] [--debug-log <path>]Debug logging can also be enabled persistently via general.debug_log in the config file; the CLI flag takes precedence when both are set. Both paths support ~ and ${VAR} expansion — the app terminates if a variable cannot be resolved.
Repo command strings use ${VAR} substitution: repo variables (${ROOT}, ${BRANCH}) are resolved first, then any remaining references are resolved from the process environment. The command is not run if any variable is unresolvable.
On first launch the repo list is empty. Press A to add a repository using the file picker.
If the current working directory is a git repository it is added automatically.
| Key | Action |
|---|---|
Ctrl-C |
Quit |
Tab |
Cycle focus forward: Repos → Status Details → History → Diff → Log |
Shift+Tab |
Cycle focus backward |
↑ / ↓ |
Navigate in focused pane |
PgUp/Dn |
Jump 10 rows in focused pane |
r |
Refresh all repositories |
Alt-f |
Fetch all tracked repos in parallel |
s |
Toggle Status Details pane |
h |
Toggle Git History pane |
b |
Toggle Branches pane |
d |
Toggle Details pane |
l |
Toggle Output Log pane |
? |
Open keybinding help overlay |
| Key | Action |
|---|---|
Enter |
Open per-repo action menu |
f |
Fetch selected repo |
p |
Pull selected repo |
P |
Push selected repo |
c |
Checkout branch |
A |
Add repository (file picker) |
D |
Remove selected repository (with confirm) |
| Key | Action |
|---|---|
↑/↓ |
Navigate branches |
c |
Checkout highlighted branch directly |
Enter |
Open branch action menu |
b / Esc |
Close Branches pane |
| Key | Action |
|---|---|
f |
Fetch (git fetch origin --prune) |
p |
Pull (auto-stash/pop, git pull --prune) |
P |
Push (sets upstream automatically if needed) |
F |
Force Push (confirmation dialog) |
c |
Checkout Branch (auto-stash/pop) |
n |
New Branch (prompts for name) |
x |
Delete Branch (select from list) |
h |
Commit History (full log) |
u/U |
Commit History ahead of / behind upstream |
t/T |
Commit History ahead of / behind trunk |
Esc |
Dismiss menu |
| Key | Action |
|---|---|
Enter |
Open per-file action menu |
↑/↓ |
Select file |
PgUp/Dn |
Jump 10 files |
| Key | Action |
|---|---|
↑/↓ |
Navigate commits and file rows |
PgUp/Dn |
Jump 10 rows |
Shift-↑ / , |
Jump to previous commit header row |
Shift-↓ / . |
Jump to next commit header row |
h |
Close history pane |
| Key | Action |
|---|---|
↑/↓ |
Scroll content |
PgUp/Dn |
Jump 10 lines |
