He encontrado este artículo Automatically keeping Git identities distinct between accounts hojeando el blog de la empresa SEP después de leer un artículo sobre testing de plantillas de CloudFormation.
La configuración que indica Aaron Alexander en el artículo referenciado permite usar una identidad concreta para cada cuenta de Git.
Esto te permite identificarte con tu cuenta de empresa en los repositorios de la empresa, en los personales con una dirección de correo personal, etc.
Una de las primeras cosas que haces al instalar Git es especificar el nombre y la dirección de correo que se asocia a los commits que realizas. Lo habitual es realizar la configuración a nivel global -para todos los repositorios- ya que es un poco tedioso tener que configurar en cada repositorio esta información una y otra vez.
El problema de establecer esta identidad global es que se aplica a todos los repositorios. En el caso de Aaron Alexander, esto es un problema ya que tiene repositorios de su empresa, repositorios personales y repositorios de diferentes clientes.
Realizar la configuración a nivel de repositorio es tedioso y repetitivo, por lo que usa la funcionalidad de inclusión condicional que ofrece Git.
De esta forma, para cada proyecto, crea un fichero específico .gitconfig-personal
, .gitconfig-work
, gitconfig-client-a
, etc con la información de la identidad que usa en ese proyecto/cliente:
.gitconfig-personal
[user]
name = Xavi Aznar
email = xavi.aznar@ejemplo.com
.gitconfig-work
[user]
name = Xavier Aznar
email = xavier.aznar@corp.com
En el fichero de configuración .gitconfig
, incluye el fichero de indentidad que corresponda mediante los conditional includes:
[includeIf "gitdir:~/Projects/Personal/"]
path = .gitconfig-personal
[includeIf "gitdir:~/Projects/Work/"]
path = .gitconfig-work
[includeIf "gitdir:~/Projects/Work/Client-A/"]
path = .gitconfig-client-a
Estos ficheros de configuración los tiene organizados por carpetas:
~/Projects
~/Projects/Personal
~/Projects/Work
~/Projects/Work/Client-A
De esta forma, cuando realiza un commit Git selecciona automáticamente la identidad correspondiente al proyecto en el que está trabajando.
Aunque Aaron no lo comenta explícitamente, de la documentación oficial de Git para las inclusiones condicionales:
If the pattern ends with
/
,**
will be automatically added. For example, the patternfoo/
becomesfoo/**
. In other words, it matches “foo” and everything inside, recursively.
Es decir, si el patrón acaba en /
, se añade automáticamente **
, lo que permite aplicar el conditional include -y por tanto la configuración de la identidad de Git específica- a todos los repositorios bajo esa ruta.