{"id":31684905,"url":"https://github.com/darksworm/gitagrip","last_synced_at":"2025-10-08T08:58:25.373Z","repository":{"id":313303967,"uuid":"1050881327","full_name":"darksworm/gitagrip","owner":"darksworm","description":"gitagrip is a lightning-fast terminal UI for managing many Git repositories: auto-discover from a directory, group by folder or custom sets, see branch/dirty/ahead-behind at a glance, run safe fetch and view logs, and persist setup via TOML.","archived":false,"fork":false,"pushed_at":"2025-10-03T19:09:53.000Z","size":58716,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-03T21:13:35.582Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/darksworm.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["darksworm"],"patreon":null,"open_collective":null,"ko_fi":"darksworm","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-09-05T05:06:34.000Z","updated_at":"2025-10-03T19:09:27.000Z","dependencies_parsed_at":"2025-09-05T07:22:34.657Z","dependency_job_id":"b9f65048-6104-452b-8fcb-8e9b8bb239c1","html_url":"https://github.com/darksworm/gitagrip","commit_stats":null,"previous_names":["darksworm/gitagrip"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/darksworm/gitagrip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darksworm%2Fgitagrip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darksworm%2Fgitagrip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darksworm%2Fgitagrip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darksworm%2Fgitagrip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/darksworm","download_url":"https://codeload.github.com/darksworm/gitagrip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darksworm%2Fgitagrip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278916428,"owners_count":26068091,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-08T08:58:23.187Z","updated_at":"2025-10-08T08:58:25.368Z","avatar_url":"https://github.com/darksworm.png","language":"Go","funding_links":["https://github.com/sponsors/darksworm","https://ko-fi.com/darksworm"],"categories":[],"sub_categories":[],"readme":"# gitagrip\n\n[![GitHub Downloads](https://img.shields.io/github/downloads/darksworm/gitagrip/total?style=flat-square\u0026label=github+downloads)](https://github.com/darksworm/gitagrip/releases/latest)\n[![Latest Release](https://img.shields.io/github/v/release/darksworm/gitagrip?style=flat-square)](https://github.com/darksworm/gitagrip/releases/latest)\n[![License](https://img.shields.io/github/license/darksworm/gitagrip?style=flat-square)](./LICENSE)\n[![Tests](https://github.com/darksworm/gitagrip/actions/workflows/test.yml/badge.svg)](https://github.com/darksworm/gitagrip/actions/workflows/test.yml)\n\n\u003e [!IMPORTANT] \n\u003e This project is currently in DEVELOPMENT and is not stable\n\nA fast, keyboard-driven terminal UI for discovering, grouping, and inspecting multiple Git repositories. Written in Go using Bubble Tea for a responsive, efficient experience.\n\n## ✨ Features\n\n- 🚀 **Fast Repository Discovery**: Automatically scans directories to find all Git repositories\n- 📁 **Smart Grouping**: Organize repositories by directory structure or custom groups\n- 📊 **Rich Git Status**: Shows branch names, dirty status, ahead/behind counts, and more\n- 🎨 **Colored Branch Display**: Main/master branches in bold green, others get consistent colors\n- ⚡ **Non-blocking UI**: Background operations keep the interface responsive\n- 🔍 **Search \u0026 Filter**: Quickly find repositories with powerful search and filtering\n- 📦 **Zero Dependencies**: Single binary with no runtime requirements except git\n\n## 🚀 Installation\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eQuick Install (Linux/macOS)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/darksworm/gitagrip/main/install.sh | sh\n```\n\nInstall a specific version:\n```bash\ncurl -sSL https://raw.githubusercontent.com/darksworm/gitagrip/main/install.sh | sh -s -- v0.1.0\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eHomebrew (macOS/Linux)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nbrew tap darksworm/homebrew-tap\nbrew install gitagrip\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eAUR (Arch Linux)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nyay -S gitagrip-bin\n# or\nparu -S gitagrip-bin\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDocker\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Run with current directory\ndocker run --rm -it -v $(pwd):/repos ghcr.io/darksworm/gitagrip:latest\n\n# Run with specific directory\ndocker run --rm -it -v /path/to/repos:/repos ghcr.io/darksworm/gitagrip:latest\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eGo Install\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\ngo install github.com/darksworm/gitagrip@latest\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eDownload Binary\u003c/strong\u003e\u003c/summary\u003e\n\nDownload the appropriate binary for your platform from the [releases page](https://github.com/darksworm/gitagrip/releases/latest).\n\n**Linux/macOS:**\n```bash\n# Download (replace VERSION and PLATFORM)\ncurl -LO https://github.com/darksworm/gitagrip/releases/download/vVERSION/gitagrip-VERSION-PLATFORM.tar.gz\n\n# Extract\ntar -xzf gitagrip-VERSION-PLATFORM.tar.gz\n\n# Install\nsudo mv gitagrip /usr/local/bin/\n```\n\n**Windows:**\nDownload the `.zip` file, extract, and add to your PATH.\n\u003c/details\u003e\n\n## 📖 Usage\n\n```bash\n# Scan current directory\ngitagrip\n\n# Scan specific directory (using flag)\ngitagrip -dir /path/to/repos\ngitagrip -d /path/to/repos  # shorthand\n\n# Scan specific directory (as argument)\ngitagrip /path/to/repos\n```\n\n## ⌨️ Keyboard Shortcuts\n\n### Navigation\n- `↑/↓`, `j/k` - Navigate up/down\n- `←/→`, `h/l` - Collapse/expand groups\n- `PgUp/PgDn` - Page up/down\n- `gg/G` - Go to top/bottom\n\n### Selection\n- `Space` - Toggle selection\n- `a/A` - Select/deselect all\n- `Esc` - Clear selection\n\n### Repository Actions\nNote: Enter integration requires lazygit to be installed and available in PATH.\n- `Enter` - Open lazygit for the selected repository\n- `H` - View git log\n- `D` - View git diff\n- `r` - Refresh repository status\n- `f` - Fetch from remote\n- `p` - Pull from remote\n- `i` - Show repository info\n- `I` - View repository command logs (pager)\n\n### Group Management\n- `z` - Toggle group expansion\n- `N` - Create new group (with selection)\n- `m` - Move repositories to group\n- `Shift+R` - Rename group\n- `Shift+J/K` - Move group up/down\n- `d` - Delete group (when on group header)\n\n### Search \u0026 Filter\n- `/` - Search repositories\n- `n` - Next search result\n- `Shift+N` - Previous search result\n- `F` - Filter repositories\n- `s` - Sort options\n\n### Other\n- `?` - Show help\n- `q` - Quit\n\n### Filter Examples\n- `status:dirty` - Show only repositories with uncommitted changes\n- `status:clean` - Show only clean repositories  \n- `status:ahead` - Show repositories ahead of remote\n\n## 🖥️ Interface\n\n```\ngitagrip                                              ↻ Refreshing 2  ↓ Fetching 1\n\n▼ Work (2)\n  ● project-api (feature/auth ↑2↓1)\n  ✓ project-web (main)\n\n▼ Personal (3)\n  ✓ dotfiles (master)\n  ● blog (draft-post)\n  ⚠ old-project (cleanup ⚠)\n\n▶ Archived (5)\n\nPress ? for help\n```\n\n### Status Indicators\n- `✓` Clean repository\n- `●` Dirty repository (uncommitted changes)\n- `⚠` Repository with errors\n- `⋯` Loading status\n- `?` Unknown status\n\n### Branch Colors\n- **Bold Green**: main/master branches\n- **Various Colors**: Other branches get consistent colors based on name\n\n## Lazygit Integration\n\nTo enable Enter → lazygit, install lazygit:\n- macOS (Homebrew): `brew install lazygit`\n- Linux: `sudo pacman -S lazygit` (Arch) or see release binaries at https://github.com/jesseduffield/lazygit\n- Go install (latest): `go install github.com/jesseduffield/lazygit@latest`\n\nYou can override the lazygit binary path via the `GITAGRIP_LAZYGIT_BIN` environment variable for testing.\n\n## 🛠️ Development\n\n### Prerequisites\n- Go 1.21 or later\n- Git\n\n### Building from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/darksworm/gitagrip.git\ncd gitagrip\n\n# Build\ngo build\n\n# Run tests\ngo test ./...\n\n# Install locally\ngo install\n```\n\n### Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'feat: add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\nPlease follow conventional commits for your commit messages.\n\n## 📄 License\n\nThis project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\nBuilt with:\n- [Bubble Tea](https://github.com/charmbracelet/bubbletea) - Terminal UI framework\n- [Lipgloss](https://github.com/charmbracelet/lipgloss) - Terminal styling\n- [Bubble](https://github.com/charmbracelet/bubbles) - TUI components\n- And the amazing Go community 💙\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarksworm%2Fgitagrip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdarksworm%2Fgitagrip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarksworm%2Fgitagrip/lists"}