miércoles, 28 de diciembre de 2022

Trucos Git: "Commitea" con el usuario correcto

¿Trabajas con varias cuentas de Git en diferentes proveedores? ¿Quizás GitHub, Azure DevOps, Bitbucket u otros?

 

Si es así seguro que te ha pasado algo muy molesto: haces los commits con el usuario erróneo. Esto sucede porque normalmente el nombre y el mail con el que hacemos nuestros commits se establece de forma global (al instalar Git en el equipo por ejemplo) y se usa con todos los commit, esté donde esté el repositorio remoto. 

 

Estos datos nada tienen que ver con la autenticación contra tu proveedor, así que aunque mi usuario en Azure DevOps fuese sergio@midominio.com, yo podría commitear como sergio@otrodominio.com

 

Vamos a verlo con un ejemplo


Commiteando con el usuario equivocado

 

Voy a clonarme un repositorio que tengo en GitHub:


            git clone https://github.com/snavarropino/CacheSleeve.git 

 

Una vez hecho esto, voy a setear mi configuración de Git, eligiendo un usuario erróneo:

 

 

git config --global user.name "wrong user"
git config --global user.email "sergio@wrongdomain.com"

 

Y seguidamente haré un commit y lo subiré al repo

 

echo hi > mychange.txt
git add .\mychange.txt
git commit -m "Added my change"
git push

 

Si revisamos la historia, tanto en local como en remotlo, vamos a ver que el commit queda "atado" a ese "wrong user". ¿Un poco loco verdad?

 



 

Aquí he forzado el error, pero lo que suele pasar es que estableces la configuración para commitear por ejemplo en Azure Devops (trabajo), luego te clonas un repo de GitHub, y al commitear va la info del trabajo en vez de la de tu cuenta personal en GitHub... 

 

¡Me pasa constantemente! Vamos a solucionarlo.

 

Forzando que cada repo tenga configuración local

 

Desde git versión 2.8 (ha llovido ya) tenemos la opción de forzar que deban configurarse usuario y email en cada repo, de modo local a este.

Esto lo conseguimos así

 

git config --global --unset-all user.email
git config --global --add user.useConfigOnly true

 

Una vez hecho esto, si en un repositorio en el que no hemos configurado localmente hacemos un commit, obtendremos un error. Ya no se usará más la configuración global.

 


 

Ahora tendremos que configurar el nombre y el email apropiado para cada repo, es más tedioso pero evitamos errores. ¿Cómo lo hacemos?


git config --local user.email sergio.navarropino@gmail.com

git config --local user.name "Sergio Navarro Pino"

 

Espero que os resulte útil y que evitéis esos molestos errores

 

Saludos! 


PD: Jose María Flores Zazo ya escribió sobre este tema, el lo resuelve con GitKraken, interesante!

https://jmfloreszazo.com/git-mejores-practicas-informacion-del-usuario