Introducción
Si lo has leído bien, no voy a volver a escribir un commit nunca más, aunque bueno, eso no es totalmente cierto, sí que lo voy a escribir, pero voy a preocuparme menos en escribirlo… los voy a hacer de una manera más ligera, más despreocupada.
¿No sabes lo que quiero decir? Pues que voy a pasar de esto
a esto
sin hacer nada, solamente escribiendo algo básico como ‘changes’ o ni eso.
La importancia de un buen mensaje de commit
Y es que commitear es algo muy simple que hacemos constantemente todos los días, ¿Pero le damos la relevancia que debe tener? Déjame hablarte de la importancia de los commits,
Puede que pienses que no es para tanto, pero tengo que decirte que un buen mensaje de commit es esencial para mantener un proyecto ordenado y comprensible. Todos sabemos que en el desarrollo de software una gran parte de tiempo se destina al mantenimiento y lectura del código.
Imagínate cuánto se puede facilitar esa tarea con mensajes de commit claros y descriptivos
Además, en entornos de trabajo grupales, donde hay más de una persona, un buen historial de commits es como un libro abierto de la evolución del proyecto. Y bueno, incluso si estás tú solo programando. Todo eso te ayuda a entender por qué se hicieron ciertos cambios y además facilita el trabajo en equipo
Mi solución
No pienso que los programadores escriban malos commits o que haya un problema a nivel general, pero sí que entiendo que muchas veces, estamos tan concentrados en el código que no nos detenemos a escribir un mensaje de commit perfecto. Bien sea porque queremos subirlo rápido para comprobar que pasa la pipeline o por cualquier otro motivo que nos haga distraernos a la hora de commitear.
Es por eso que he creado un script, súper básico, que cada vez que realizas un commit, pasa tu mensaje por la API gratuita de Gemini y te lo reescribe siguiendo las normas que tú le especifiques, es decir un prompt personalizado.
El script utiliza una dependencia de Python que por detrás hace un fetch a Gemini, es fácil de usar porque solo necesita vuestra API key de Gemini, pero el código se podría modificar para que hiciese fetch a vuestra API favorita de cualquier LLM.
La “magia” para que se ejecute cada vez que commiteamos se encuentra en los hooks de git, no os tenéis que preocupar de eso, ya que dejé otro script en el código que añade a los proyectos de una dirección que tú especifiques el hook necesario para ejecutar nuestro código. Aparte modifica la configuración para que en los proyectos nuevos se aplique por defecto esto, de manera que nunca más sería necesario ejecutarlo.
Personalización
Y lo mejor de todo es que este sistema es totalmente configurable. Puedes ajustar el prompt para que siga los estándares de tu empresa, de tu equipo o simplemente los que tú prefieras. Yo por ejemplo le he puesto que siga los estándares de Conventional Commits, pero literalmente puedes decir que conteste con insultos o una frase muy poco profesional
Además, he añadido una flag muy fácil de modificar en el script por si quieres que también se pase el código modificado (es decir el git diff) a la API. Esto es útil si quieres que el mensaje de commit tenga contexto sobre los cambios realizados. Por ejemplo, podría resumir los cambios más importantes o destacar alguna función clave que hayas implementado.
Eso sí, lo puse en una flag en el código porque entiendo que por temas de privacidad o seguridad no es posible enviar el código a una API externa. No hay problema, simplemente no actives la flag y el script solo trabajará con el mensaje que le proporciones, sin compartir ningún fragmento de código.
Aunque bueno, según las políticas de privacidad de Google, Gemini no usa los datos de conversaciones para entrenar sus modelos, pero eso ya es cosa vuestra, yo ahí no me meto
Os dejo más info sobre eso por aqui
https://cloud.google.com/vertex-ai/generative-ai/docs/data-governance?hl=es-419
https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/multimodal-faqs?hl=es-419
¿Y qué gano con todo esto?
Automatizar la generación de mensajes de commit no solo te ahorra tiempo, sino que también reduce la carga cognitiva. Nuestro cerebro tiene una capacidad limitada para tomar decisiones y concentrarse en tareas complejas. Al delegar tareas repetitivas y menos críticas, como pulir mensajes de commit, liberamos recursos mentales para lo que realmente importa: resolver problemas y escribir código de calidad.
Nah, en verdad no lo sé, simplemente me aburría y me parecía entretenido y a veces me da pereza commitear como se debe… nada más
Código
👉 https://github.com/edunavajas/git-commit-enhancer
No voy a entrar a especificar a bajo nivel lo que tenéis que hacer para instalarlo porque lo pone todo en el README, pero básicamente, para que funcione el script debéis primero instalar las dependencias que se hace desde el fichero llamado dependencies, es obvio ¿no? Bueno a no ser que tengas Windows entonces tendrás que seguir unos pasos manuales… lo siento, no es mi culpa que programéis en Windows… Y por último tengo ahí otro script de Python para el “Setup” para que podáis indicarle una carpeta de repositorios ya existentes para que se les aplique el hook del que hemos hablado antes.
No se si le servirá a alguien, pero a mi me ayuda mucho en mi día a día!