A fast TUI dashboard for discovering and managing multiple Git repositories from a single interface.
- π Automatic Discovery: Recursively scans directories for Git repositories
- π Rich Status View: 7-column table showing repository state at a glance
- β‘ Parallel Operations: Fast status fetching using concurrent threads
- π― Safe Actions: Remote validation and confirmation prompts for push/pull
- π Progress Indicators: Real-time progress bar during repository scanning
- π Debug Logging: Optional detailed logging for troubleshooting
- β Well Tested: 17 unit and integration tests
# Add the tap
brew tap jvm/tap
# Install (or in one command)
brew install jvm/tap/git-dashcargo install --path .cargo install git-dashUsing Just (recommended):
# Install just
brew install just # macOS
# or
cargo install just
# Common commands
just run # Run from current directory
just debug # Run with debug logging
just test # Run all tests
just check # Run all quality checks
just build # Build release binary
just install # Install locallyUsing Cargo directly:
# Run from current directory
cargo run
# Run with debug logging
cargo run -- --debug
# Scan a specific directory
cargo run -- ~/repos
# Release build for better performance
cargo build --release
./target/release/git-dashgit-dash [OPTIONS] [PATH]
ARGS:
path Optional directory to scan (defaults to current directory)
OPTIONS:
-d, --debug Enable debug logging to git-dash-debug.log
-h, --help Print help information
The main view shows a table with the following columns:
- Repository: Name of the repository
- Branch: Current branch (or "DETACHED" for detached HEAD)
- Dirty: Working tree status (clean/dirty with color coding)
- Ahead/Behind: Commits ahead/behind upstream (+2/-1 format)
- Changes: Summary of changes by type (M:2 A:1 D:1 format)
- Remote: Simplified remote URL (e.g., github.com/user/repo)
- Last Fetch: Time since last fetch (5m, 2h, 3d format)
j/korβ/β: Move selection up/downPageDown/PageUp: Jump 10 repositories at a time
p: Pull selected repository (prompts for confirmation)u: Push selected repository (prompts for confirmation)r: Refresh status for all repositories
y: Confirm actionnorEsc: Cancel action
q: Quit applicationCtrl+C: Force quit
- Recursively scans the specified directory for
.gitfolders or files - Handles both regular repositories and worktrees/submodules (gitdir files)
- Stops at nested repositories (doesn't traverse into subdirectories of found repos)
- Shows animated progress bar during scanning
- Parses Git's porcelain v2 format for accurate status information
- Displays change types: Modified (M), Added (A), Deleted (D), Untracked (?)
- Simplifies remote URLs for better readability
- Shows human-readable last fetch timestamps
- Inline error messages when Git operations fail
- Validates remote configuration before attempting push/pull
- Requires explicit confirmation (y/n) for all network operations
- Fast-forward only pulls to prevent accidental merge commits
- Timeouts for long-running Git operations (30s for push/pull, 5s for status)
- Parallel status fetching: All repositories checked concurrently
- Two-phase scanning: 40% for discovery, 60% for parallel status
- Non-blocking UI: All Git operations run in background worker thread
- Optimized porcelain parsing for minimal overhead
Enable debug logging to troubleshoot issues or understand performance:
cargo run -- --debug ~/reposDebug logs include:
- Timestamp with millisecond precision
- Repository scan progress
- Git command execution times
- Success/failure status for all operations
- Performance metrics for status fetching
Logs are written to git-dash-debug.log in the current directory.
Run the test suite:
cargo testThe project includes:
- 14 unit tests in
src/status.rs(parsing, formatting, URL simplification) - 3 integration tests in
tests/repo_discovery.rs(discovery, nested repos, gitdir files)
- Rust 1.92.0 or later (specified in
rust-toolchain.toml) - Just command runner (optional but recommended)
Before committing, run:
just check # Format, lint, test, and buildOr individually:
cargo fmt # Format code
cargo clippy --all-targets --all-features # Lint
cargo test # Run tests
cargo build --release # BuildSee RELEASE.md for the full release checklist and workflow.
cargo-deny - Check for security vulnerabilities and license issues:
cargo install cargo-deny
cargo deny check # or: just denycargo-watch - Auto-rebuild on file changes:
cargo install cargo-watch
cargo watch -x test # or: just watch-testSee CONTRIBUTING.md for development guidelines.
Licensed under the MIT License.
Copyright (c) 2025 Jose Mocito