{"id":31628206,"url":"https://github.com/alpercepni/gommit","last_synced_at":"2026-04-13T21:32:37.879Z","repository":{"id":316992817,"uuid":"1065554149","full_name":"Alpercepni/gommit","owner":"Alpercepni","description":"🚀 Streamline your Git commit messages with Gommit, a simple tool that enhances clarity and consistency in version control.","archived":false,"fork":false,"pushed_at":"2025-10-05T09:18:13.000Z","size":1419,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-05T11:31:53.701Z","etag":null,"topics":["cli","cobra-cli","command-line-tools","commit","commit-message","commitizen","commits","consistency","developer-tools","git-hooks","go","go-git","llm","open-source","productivity","promptui","terminal","workflow"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":false,"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/Alpercepni.png","metadata":{"files":{"readme":"README.es.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2025-09-28T00:49:57.000Z","updated_at":"2025-10-05T09:18:16.000Z","dependencies_parsed_at":"2025-10-05T11:23:52.837Z","dependency_job_id":null,"html_url":"https://github.com/Alpercepni/gommit","commit_stats":null,"previous_names":["alpercepni/gommit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Alpercepni/gommit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alpercepni%2Fgommit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alpercepni%2Fgommit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alpercepni%2Fgommit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alpercepni%2Fgommit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alpercepni","download_url":"https://codeload.github.com/Alpercepni/gommit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alpercepni%2Fgommit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278672230,"owners_count":26025867,"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-06T02:00:05.630Z","response_time":65,"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":["cli","cobra-cli","command-line-tools","commit","commit-message","commitizen","commits","consistency","developer-tools","git-hooks","go","go-git","llm","open-source","productivity","promptui","terminal","workflow"],"created_at":"2025-10-06T20:19:58.128Z","updated_at":"2025-10-06T20:19:59.577Z","avatar_url":"https://github.com/Alpercepni.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gommit [![Go Report Card](https://goreportcard.com/badge/github.com/Hangell/gommit)](https://goreportcard.com/report/github.com/Hangell/gommit) [![GitHub tag](https://img.shields.io/github/v/tag/Hangell/gommit?label=version\u0026color=orange)](https://github.com/Hangell/gommit/tags) [![Build](https://github.com/Hangell/gommit/actions/workflows/ci.yml/badge.svg)](https://github.com/Hangell/gommit/actions/workflows/ci.yml) [![License](https://img.shields.io/github/license/Hangell/gommit)](LICENSE) [![Contributing](https://img.shields.io/badge/contributions-welcome-brightgreen)](CONTRIBUTING.md) [![Go Reference](https://pkg.go.dev/badge/github.com/Hangell/gommit.svg)](https://pkg.go.dev/github.com/Hangell/gommit)\n\n**gommit** es un asistente de línea de comandos rápido y sin dependencias para _Conventional Commits_, escrito en Go.  \nAbre un asistente interactivo (similar a Commitizen/cz) y ejecuta `git commit` con el mensaje correctamente formateado.\n\n\u003e 💡 Por defecto, **emojis de tipo de commit** se incluyen **en el encabezado** (ej: `feat 💡: ...`) para hacerlos visibles en las listas de archivos/carpetas de GitHub. Los emojis solo se añaden al título, no al cuerpo o pie de página.\n\n---\n\n## ✨ Características\n\n- ✅ Asistente interactivo con búsqueda/atajos (números, palabras clave, `q` para salir)\n- ✅ Tipos estándar de Conventional Commits: **feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert**  \n  Más extras: **WIP, prune**\n- ✅ Emojis en el menú (con fallback ASCII automático) y **emoji en el encabezado del commit**\n- ✅ Verificaciones previas de Git:\n  - Validación de repositorio (`not a git repository…` si no está en uno)\n  - Auto-stage (`git add -A`) cuando no hay nada en stage (configurable)\n  - Lista cambios en stage antes de hacer commit (configurable)\n  - Modo `--amend` con banner del último commit\n- ✅ Campos completos estilo Commitizen:\n  - `scope` (opcional)\n  - `subject` (requerido, `\u003c=72` caracteres)\n  - `body` multilínea (termina con **punto único en una línea** **o** **presiona Enter dos veces**)\n  - `BREAKING CHANGE` (pregunta y pide descripción)\n  - Issues: `Closes #123` / `Refs #45` (si se desea)\n- ✅ Modo **`--install`** integrado que instala/actualiza el binario en el PATH del usuario\n  - Windows: `%LOCALAPPDATA%\\Programs\\gommit\\bin`\n  - Linux/macOS: `~/.local/bin` (añade al PATH si falta)\n\n---\n\n## 🚀 Instalación\n\n### Método 1: Scripts de Instalación de Una Línea **(Recomendado)**\n\n**Windows:**\n```powershell\npowershell -ExecutionPolicy Bypass -NoProfile -Command \"irm https://raw.githubusercontent.com/Hangell/gommit/main/scripts/install.ps1 | iex\"\n```\n\n**Linux/macOS:**\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Hangell/gommit/main/scripts/install.sh | bash\n```\n\n### Método 2: Descargar Binario de Release\n1. Descarga el archivo para tu OS/arquitectura desde la página de **Releases**\n2. Extrae el paquete (`.zip` en Windows / `.tar.gz` en Linux/macOS)\n3. Ejecuta el binario extraído con la flag `--install`:\n\n**Windows (PowerShell):**\n```powershell\n.\\gommit.exe --install\n# Cierra y reabre la terminal\ngommit --version\n```\n\n**Linux/macOS:**\n```bash\nchmod +x ./gommit\n./gommit --install\n# Reinicia el shell\ngommit --version\n```\n\n\u003e Ejecutar `--install` nuevamente actualizará la instalación.\n\n---\n\n## 💻 Uso Rápido\n\nDentro de un repositorio Git con cambios:\n\n```bash\ngommit\n```\n\nFlujo típico del asistente:\n1. Selecciona **tipo** (número, nombre o búsqueda)\n2. Ingresa **scope** (opcional)\n3. Escribe **subject** (modo imperativo, `\u003c=72` chars)\n4. Añade **body** (opcional, multilínea) – termina con `.` en una línea **o** presiona Enter **dos veces**\n5. **¿Cambios breaking?** (si \"sí\", describe el cambio)\n6. **¿Issues?** (Closes/Refs)\n\nAl final, `gommit` ejecuta `git commit` (o muestra preview con `--dry-run`).\n\n### Ejemplos\n\nCommit normal (con auto-stage):\n```bash\ngommit\n```\n\nPermitir commit vacío:\n```bash\ngommit --allow-empty\n```\n\nEnmendar último commit:\n```bash\ngommit --amend\n```\n\nMostrar solo el mensaje (no hacer commit):\n```bash\ngommit --dry-run\n```\n\nPasar todo vía flags (sin asistente):\n```bash\ngommit --type feat --scope ui --subject \"añadir selector de tipo\" --body \"Detalles de implementación...\"\n```\n\nModo no interactivo con todos los parámetros:\n```bash\ngommit --type fix --scope api --subject \"resolver problema de autenticación\" --body \"Arreglada validación de token JWT\\n\\nEsto resuelve el problema donde tokens expirados\\nno se manejaban adecuadamente.\" --footer \"Closes #42\"\n```\n\n---\n\n## 📝 Formato del Encabezado del Commit\n\n```\n\u003ctype\u003e[(!)][(scope)] \u003cemoji\u003e: \u003csubject\u003e\n```\n\nEjemplos:\n```\nfeat 💡: añadir comando install\nfix(api) 🐛: corregir nil pointer en carga de config\nrefactor(core)! 🎨: unificar message builder\n```\n\n\u003e El `!` aparece solo en el **encabezado**; la validación interna usa el tipo \"puro\" (`feat`, `fix`, etc.) para mantener compatibilidad con herramientas de Conventional Commits.\n\n---\n\n## ⚙️ Flags de Línea de Comandos\n\n| Flag | Descripción |\n|---|---|\n| `--version` | Muestra versión y sale |\n| `--install` | Instala/actualiza binario en el PATH del usuario y sale |\n| `--dry-run` | Solo imprime el mensaje generado (no llama a `git commit`) |\n| `--type` | Tipo de commit (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert, WIP, prune) |\n| `--scope` | Scope opcional (ej: `ui`, `api`) |\n| `--subject` | Línea de asunto (modo imperativo, `\u003c=72` chars) |\n| `--body` | Texto del cuerpo (usa `\\n` para nuevas líneas) |\n| `--footer` | Pie de página manual (ej: `Closes #123`) |\n| `--as-editor` | Ejecutar como editor de Git (modo `COMMIT_EDITMSG`) |\n| `--allow-empty` | Permitir commit vacío |\n| `--amend` | Enmendar el último commit |\n| `--no-verify` | Saltar hooks (`pre-commit`, `commit-msg`) |\n| `--signoff` | Añadir trailer `Signed-off-by` |\n| `--auto-stage` | Auto `git add -A` cuando no hay nada en stage (por defecto: `true`) |\n| `--show-status` | Mostrar resumen de cambios en stage antes del commit (por defecto: `true`) |\n\n---\n\n## 📋 Tipos de Commit Soportados\n\n| Tipo | Emoji | Descripción |\n|---|---|---|\n| `WIP` | 🚧 | Trabajo en progreso |\n| `feat` | 💡 | Una nueva funcionalidad |\n| `fix` | 🐛 | Arreglar un bug |\n| `chore` | 📦 | Actualizar dependencias, despliegues, archivos de configuración |\n| `refactor` | 🎨 | Mejorar estructura/formato del código |\n| `prune` | 🔥 | Eliminar código o archivos |\n| `docs` | 📝 | Escribir documentación |\n| `perf` | ⚡ | Mejorar rendimiento |\n| `test` | ✅ | Añadir tests |\n| `build` | 🔧 | Cambios en el sistema de build o dependencias |\n| `ci` | 🤖 | Cambios en configuración de CI/CD |\n| `style` | 💅 | Cambios que no afectan el significado del código |\n| `revert` | ⏪ | Revertir a un commit |\n\n---\n\n## 🔧 Modo Editor de Git\n\nPuedes configurar `gommit` como tu editor de Git para mensajes de commit consistentes:\n\n```bash\ngit config --global core.editor \"gommit --as-editor\"\n```\n\nEsto abrirá el asistente `gommit` cuando Git necesite un mensaje de commit (incluyendo durante `git commit`, `git merge`, `git rebase`, etc.).\n\n---\n\n## 🛠️ Desarrollo\n\n### Construir desde el Código Fuente\n\nRequisitos: Go 1.22+\n\n```bash\n# Clonar el repositorio\ngit clone https://github.com/Hangell/gommit.git\ncd gommit\n\n# Construir\ngo build -o gommit ./cmd/gommit\n\n# Ejecutar tests\ngo test ./...\n\n# Instalar localmente\n./gommit --install\n```\n\n### Construir con Información de Versión\n\nPara releases con inyección de versión:\n```bash\ngo build -ldflags \"-s -w -X main.version=0.2.0\" -o gommit ./cmd/gommit\n```\n\n---\n\n## 🎨 Variables de Entorno\n\n| Variable | Descripción |\n|---|---|\n| `NO_COLOR=1` | Deshabilita colores ANSI en el menú |\n| `NO_EMOJI=1` | Fuerza fallback ASCII en el menú (encabezado aún usa emojis unicode) |\n\n---\n\n## 🤝 Contribuyendo\n\n1. Haz fork del repositorio\n2. Crea tu rama de feature (`git checkout -b feature/caracteristica-increible`)\n3. Haz commit de tus cambios usando `gommit` 😉\n4. Haz push a la rama (`git push origin feature/caracteristica-increible`)\n5. Abre un Pull Request\n\n---\n\n## 📄 Licencia\n\nGPL-3.0-only — ver archivo [`LICENSE`](LICENSE) para detalles.\n\n---\n\n## ❓ FAQ\n\n**¿gommit reemplaza a Commitizen?** Es una **alternativa**. Si tu entorno ya depende de Node/npm y estás cómodo con adaptadores cz, quédate con él. Si quieres **menos dependencias**, **instalación única**, y **uso consistente** en múltiples repositorios/servidores, gommit es probablemente más simple.\n\n**¿Es más rápido?** No publicamos benchmarks aquí, pero como binario nativo, gommit **tiende a iniciar más rápido** y usar menos memoria que herramientas CLI tradicionales de Node — especialmente en entornos fríos (CI, containers) donde iniciar el runtime de Node añade latencia.\n\n**¿Funciona offline?** Sí. Una vez instalado, no necesita acceso a internet para ejecutar el asistente o hacer commit.\n\n**¿Por qué se creó gommit?** La idea nació de la frustración con entornos nvm donde teníamos que instalar `git-cz` para cada versión de nvm o directamente en cada proyecto. gommit es mucho más simple y proporciona una solución única y unificada.\n\n---\n\n## 👨‍💻 Autor\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://avatars.githubusercontent.com/u/53544561?v=4\" width=\"150\" style=\"border-radius: 50%;\" /\u003e\n\n**Rodrigo Rangel**\n\n  \u003cdiv\u003e\n    \u003ca href=\"https://hangell.org\" target=\"_blank\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/website-000000?style=for-the-badge\u0026logo=About.me\u0026logoColor=white\" alt=\"Website\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://play.google.com/store/apps/dev?id=5606456325281613718\" target=\"_blank\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/Google_Play-414141?style=for-the-badge\u0026logo=google-play\u0026logoColor=white\" alt=\"Google Play\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.youtube.com/channel/UC8_zG7RFM2aMhI-p-6zmixw\" target=\"_blank\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/YouTube-FF0000?style=for-the-badge\u0026logo=youtube\u0026logoColor=white\" alt=\"YouTube\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.facebook.com/hangell.org\" target=\"_blank\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/Facebook-1877F2?style=for-the-badge\u0026logo=facebook\u0026logoColor=white\" alt=\"Facebook\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.linkedin.com/in/rodrigo-rangel-a80810170\" target=\"_blank\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/-LinkedIn-%230077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" alt=\"LinkedIn\" /\u003e\n    \u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n\n---\n\n## 🙏 Agradecimientos\n\n- Inspirado por [Commitizen](https://github.com/commitizen/cz-cli)\n- Construido con la especificación [Conventional Commits](https://www.conventionalcommits.org/)\n- ¡Los emojis ayudan a hacer el historial de commits más visual y divertido! 🎉\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cstrong\u003eHecho con ❤️ para la comunidad de desarrolladores\u003c/strong\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpercepni%2Fgommit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falpercepni%2Fgommit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falpercepni%2Fgommit/lists"}