Cuando trabajamos en desarrollo de software desde un mismo ordenador o laptop en varios contextos, ya sea proyectos personales, freelance, consultoría y trabajo corporativo, y usamos Git, es muy común que empecemos a registrar commits con el usuario equivocado.
A todos nos ha pasado: haces git log y aparece tu correo del trabajo en un repositorio personal… o peor, tu correo personal en un repositorio del trabajo. Sí, un clásico. Para evitar esos errores, necesitamos una forma de configurar Git que se adapte automáticamente según la carpeta donde estemos trabajando.
Supongamos que tenemos las siguientes identidades:
Personal (mis proyectos, mi contenido, mis repos abiertos)
Trabajo (código del trabajo, repos internos, consultoría, estudios, etc)
Al inicio creía que lo podría controlar configurándolo todo de forma manual.
git config --global user.name "Luis Personal"
git config --global user.email "personal@example.com"
Y luego, cuando entraba a un repo del trabajo, hacía esto:
git config user.name "Luis Trabajo"
git config user.email "luis@trabajo.com"
Pero como siempre trabajaba en múltiples repos al mismo tiempo lo olvidaba.
Y Git no perdona: o sobreescribes tu configuración, o comiteas con el usuario equivocado.
Ambas cosas son molestas; la segunda puede ser incluso un problema de compliance. Eso me motivó a buscar una solución más elegante, automática y sin pensar.
Contenido
ToggleEl problema de fondo (y por qué la configuración manual no escala)
Git tiene dos niveles de configuración importantes:
1. Global
Es lo que vive en ~/.gitconfig. Se aplica a todo el sistema, a todos los repositorios en forma global.
2. Local
Es lo que vive en .git/config dentro de cada repositorio. Tiene prioridad sobre el global. Si tú configuras algo mal a nivel global, lo arrastras a todos tus proyectos.
El problema es que si configuramos mal el perfil global o nos olvidamos de sobrescribir el local, Git usará el usuario incorrecto. Esto termina generando commits firmados con otro correo, PRs con un usuario distinto o historiales mezclados entre lo personal y lo laboral. La configuración manual funciona pero no escala.
Configurar Git por carpeta
Git tiene un feature poco conocido pero bastante útil: configurar ajustes dependiendo de la carpeta donde se encuentra el repositorio.
Esto se hace con la directiva includeIf, y lo que hace es decirle a Git: Si este repo está dentro de esta ruta <ruta>, usa este archivo de configuración adicional ubicado en <archivo-de-cofig>.
[includeIf "gitdir:"]
path =
Configuración paso a paso
1. Configuración global
Si configuramos de forma global nuestro usuario y correo personal en Git:
git config --global user.email "lguisadom@gmail.com"
git config --global user.name "Luis Guisado"
Este comando modifica automáticamente el archivo ~/.gitconfig en tu directorio home. Allí Git guarda el perfil global que usará en todos los repositorios, salvo que algún repo o regla condicional lo sobrescriba.
En la imagen podemos ver el resultado de aplicar el comando anterior. Se incluyó automáticamente en el archivo ~/.gitconfig la entrada [user] con el name y email establecido como global.
A partir de allí, cualquier repositorio que gestionemos con Git, tendrá por defecto los datos de ese usuario y email establecidos a nivel global.
2. Crear el archivo especial para tu carpeta de consultorías
Para el ejemplo, imaginemos que el directorio donde mantenemos los repositorios de nuestros trabajos de consultoría tiene por nombre «consulting» con ruta absoluta /home/lagm/Documents/consulting/
Además, queremos que los repositorios dentro del directorio «consulting» tengan la siguiente configuración de Git:
- user: Luis Consulting
- email: luis@consulting.com
Vamos a crear un archivo con la configuración requerida para mis repositorios de Consultoría:
[user]
name = Luis Consulting
email = luis@consulting.com
Este archivo puede tener cualquier nombre y ubicación. Para este ejemplo usemos el nombre .gitconfig-consulting y lo ubicaremos en el directorio home. Para lograr esto usemos el siguiente comando:
cat > ~/.gitconfig-consulting <
Podemos constatar que se creó el archivo con el contenido deseado para el perfil de consulting.
3. Incluir la configuración condicional
Hasta este punto, ya configuramos dos cosas importantes:
Un perfil global (tu identidad personal).
Un archivo de configuración adicional con tu identidad del trabajo/consultoría.
Pero falta la pieza clave: decirle a Git cuándo debe usar ese archivo adicional. Esto lo haremos así:
git config --global includeIf.gitdir:"/home/lagm/Documents/consulting/".path "~/.gitconfig-consulting"
El comando anterior modifica el archivo de configuración global de Git .gitconfig agregando un bloque como este:
[includeIf "gitdir:/home/lagm/Documents/consulting/"]
path = ~/.gitconfig-consulting
Podemos comprobar el contenido actual del archivo de configuración de Git de la siguiente manera:
cat ~/.gitconfig
De esta forma, no necesitas configurar nada dentro de cada repositorio. Git resolverá automáticamente qué identidad usar dependiendo de la carpeta donde estés.
4. Verificación del uso del perfil condicional "consulting"
Si estamos en cualquier carpeta dentro de:/home/lagm/Documents/consulting/ Git incluirá automáticamente el archivo ~/.gitconfig-consulting con los datos de user y email establecidos.
Por ejemplo, creamos una subcarpeta example e inicializamos un repositorio git con git init. Luego, podremos verificar que git detecta las configuraciones esperadas al ejecutar git config user.name o git config user.email.
Incluso, si mañana clonas un repo nuevo dentro de ~/Documents/consulting/, automáticamente tendrá el usuario correcto.
¿Tienes algún otro truco útil como este que quieras compartir?
Si tienes algún otro truco en Git o de desarrollo en general, te invito a compartirlo.
Siempre hay formas más elegantes, seguras y cómodas de hacer las cosas.

