{"id":46661116,"url":"https://github.com/nazarli-shabnam/git-explain","last_synced_at":"2026-04-05T00:05:19.044Z","repository":{"id":342980585,"uuid":"1174138141","full_name":"nazarli-shabnam/git-explain","owner":"nazarli-shabnam","description":"Commit smarter, not harder. Suggests git add and git commit from your changes-local heuristics or optional AI. Fast, private, and works out of the box.","archived":false,"fork":false,"pushed_at":"2026-03-25T05:11:29.000Z","size":86,"stargazers_count":9,"open_issues_count":1,"forks_count":8,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T01:22:24.476Z","etag":null,"topics":["cli","commit-messages","developer-tools","gemini","git","python"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/git-explain/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nazarli-shabnam.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-03-06T05:30:27.000Z","updated_at":"2026-04-02T05:49:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nazarli-shabnam/git-explain","commit_stats":null,"previous_names":["nazarli-shabnam/git-explain"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/nazarli-shabnam/git-explain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nazarli-shabnam%2Fgit-explain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nazarli-shabnam%2Fgit-explain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nazarli-shabnam%2Fgit-explain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nazarli-shabnam%2Fgit-explain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nazarli-shabnam","download_url":"https://codeload.github.com/nazarli-shabnam/git-explain/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nazarli-shabnam%2Fgit-explain/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31419552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cli","commit-messages","developer-tools","gemini","git","python"],"created_at":"2026-03-08T11:06:56.605Z","updated_at":"2026-04-05T00:05:19.035Z","avatar_url":"https://github.com/nazarli-shabnam.png","language":"Python","readme":"# git-explain\n\n**Commit message block?** Run this in your repo after you change files. It suggests `git add` and `git commit` lines you can copy—or apply in one step if you want. **Nothing leaves your machine** unless you turn on AI.\n\n[![PyPI](https://img.shields.io/pypi/v/git-explain.svg?label=pypi)](https://pypi.org/project/git-explain/)\n[![GitHub tag](https://img.shields.io/github/v/tag/nazarli-shabnam/git-explain?label=repo)](https://github.com/nazarli-shabnam/git-explain/tags)\n\n\n---\n\n## Install (Python 3.10+)\n\n```bash\npip install git-explain\n```\n\n**From source** (this repo):\n\n```bash\npip install -e .\n```\n\nOptional: install a specific tag from GitHub instead of PyPI:\n\n```bash\npip install \"git+https://github.com/nazarli-shabnam/git-explain.git@v2.1.8\"\n```\n\n---\n\n## Try it\n\n1. In any git repo, change or add a file (not ignored).\n2. Run:\n   ```bash\n   git-explain\n   ```\n3. Choose what to include (`all` is fine), read the suggestion, answer **`n`** if you only want to copy commands yourself—nothing bad happens.\n\nHeuristics guess a sensible type and message from paths and statuses. **No account, no key, no network** for that path.\n\n---\n\n## Optional: Gemini\n\nIf you want sharper messages, set **`GEMINI_API_KEY`** (or `GOOGLE_API_KEY`) in the environment or a **`.env`** file in the folder where you run the tool.\n\n| Command | In plain terms |\n|--------|----------------|\n| `git-explain --ai` | AI sees **paths and change type** only (no file contents). |\n| `git-explain --ai --with-diff` | AI also sees the **diff**—better detail; only use if you’re OK sending that to the API. |\n| `git-explain --suggest` | **Staged files only**; prints one **`git commit -m \"...\"`** line for scripting. Needs AI; don’t combine with other flags. |\n\nEverything else (`--auto`, `--staged-only`, `--cwd`, model override, shell completion): **`git-explain --help`**.\n\n---\n\n## If Gemini complains\n\n- **429 / quota** — wait a bit, or try the default model; see Google’s [rate limits](https://ai.google.dev/gemini-api/docs/rate-limits).\n- **404 / model not found** — set something current, e.g. **`GEMINI_MODEL=gemini-2.5-flash`**, and check their [model list](https://ai.google.dev/api/models).\n\n---\n\n## Developers\n\n```bash\npip install -e \".[dev]\"\npytest -q\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnazarli-shabnam%2Fgit-explain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnazarli-shabnam%2Fgit-explain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnazarli-shabnam%2Fgit-explain/lists"}