{"id":48461591,"url":"https://github.com/altafino/gitinfo","last_synced_at":"2026-04-09T04:00:58.585Z","repository":{"id":348660863,"uuid":"1199184375","full_name":"altafino/gitinfo","owner":"altafino","description":"Terminal UI for exploring who did what in a Git repository","archived":false,"fork":false,"pushed_at":"2026-04-02T07:03:37.000Z","size":11138,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-07T02:25:56.414Z","etag":null,"topics":["git","go","golang"],"latest_commit_sha":null,"homepage":"https://altafino.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/altafino.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2026-04-02T05:48:02.000Z","updated_at":"2026-04-03T08:08:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/altafino/gitinfo","commit_stats":null,"previous_names":["altafino/gitinfo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/altafino/gitinfo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafino%2Fgitinfo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafino%2Fgitinfo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafino%2Fgitinfo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafino%2Fgitinfo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/altafino","download_url":"https://codeload.github.com/altafino/gitinfo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/altafino%2Fgitinfo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31537791,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"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":["git","go","golang"],"created_at":"2026-04-07T02:05:14.551Z","updated_at":"2026-04-08T03:01:00.291Z","avatar_url":"https://github.com/altafino.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gitinfo\n\nTerminal UI for exploring who did what in a Git repository. Run it from any clone to browse branches, users, and file-level history without leaving the shell.\n\nBuilt with [Bubbletea](https://github.com/charmbracelet/bubbletea), [Bubbles](https://github.com/charmbracelet/bubbles), and [Lip Gloss](https://github.com/charmbracelet/lipgloss).\n\n---\n\n## Features\n\n| Feature | What it does |\n| :--- | :--- |\n| **Branch users** | For each local branch, lists unique committers (name and e-mail). |\n| **User branches** | Pick a person (name or e-mail, partial match). Optionally limit to the last *N* days. Lists every branch where they committed. |\n| **User files** | Pick a person, then optional branch and day window. Lists files they changed, sorted by touch count. **Select a file** to open **commit history** (hash, date, author, subject, body). **Esc** or **q** returns to the file list. |\n| **User dashboard** | Pick a person from the same all-authors list, optionally limit to the last *N* days, then view a **scrollable summary**: commit counts (merge and non-merge), first/last activity, total insertions/deletions from non-merge diffs, local branches touched (capped list), top files, recent commits, and commits per calendar year. Large repos may take a moment while git aggregates data. |\n\n---\n\n## Quick start\n\n```bash\ncd /path/to/a/git/repo\ngitinfo\n```\n\nIf you are not inside a Git working tree, the program exits with an error.\n\n---\n\n## Install\n\n**With the Go toolchain** (installs from the module at `@latest`):\n\n```bash\ngo install github.com/altafino/gitinfo@latest\n```\n\n**From source:**\n\n```bash\ngit clone https://github.com/altafino/gitinfo.git\ncd gitinfo\ngo build -o gitinfo .\n```\n\nPut the binary on your `PATH` (for `go install`, `$GOPATH/bin` or `$(go env GOPATH)/bin` is typical).\n\n---\n\n## Controls\n\n| Key | Action |\n| :--- | :--- |\n| **↑** **↓** (also **k** / **j** on some screens) | Move the highlight or scroll |\n| **Enter** | Choose a menu item, confirm user, submit a form, or open commit details for the highlighted file |\n| **/** | Filter the user list (user branches, user files, user dashboard) |\n| **Tab** | Next field on forms |\n| **Esc** or **q** | Go back one level; on the main menu, **q** exits the app. From the **User dashboard** screen, **Esc** returns to the day filter; **q** jumps to the main menu. |\n| **Ctrl+C** | Quit |\n\n---\n\n## Screens in brief\n\n### Branch users\n\nShows all local branches and the people who have non-merge commits on each branch. Use **↑** **↓** to move the highlight between users, then **Enter** to open the **User dashboard** (optional last *N* days, same as the menu entry). **Esc** from the day filter returns here.\n\n### User branches\n\n1. Choose **User Branches** from the menu.  \n2. Select a user from the list (type **/** to narrow the list).  \n3. Optionally enter **last N days** (empty means all time).  \n4. You get a list of branches where that user appears in the history.\n\nMatching is case-insensitive and substring-based on name or e-mail.\n\n### User files\n\n1. Choose **User Files**.  \n2. Select a user (**/** to filter).  \n3. Optionally set **branch** (empty = all branches) and **last N days** (empty = all time).  \n4. Use **↑** **↓** to move the cursor over files; **Enter** loads **commit history** for that file and user (respecting the same branch and day filters).  \n5. In the history view, **↑** **↓** scrolls long output; **Esc** or **q** returns to the file list.\n\n### User dashboard\n\n1. Choose **User Dashboard** from the menu.  \n2. Select a user (**/** to filter).  \n3. Optionally enter **last N days** (empty means all history), then **Enter** to load.  \n4. Scroll the dashboard with **↑** **↓**. **Esc** goes back to the filter step; **q** returns to the main menu.\n\nThe dashboard matches the exact author identity (name and e-mail) from the user list. It does not include reflogs, stashes, or other data outside normal commit history.\n\n---\n\n## Requirements\n\n- **Go** 1.24 or newer (to build)  \n- **`git`** on `PATH`  \n- Current working directory must be inside a Git repository when you run `gitinfo`\n\n---\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltafino%2Fgitinfo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faltafino%2Fgitinfo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltafino%2Fgitinfo/lists"}