¿Puedo especificar varios usuarios en .gitconfig?
En mi ~/.gitconfig
, incluyo mi dirección de correo electrónico personal en[user]
, ya que eso es lo que quiero usar para los repositorios de Github.
Pero recientemente también comencé a usar git para el trabajo. El repositorio git de mi empresa me permite confirmar, pero cuando envía anuncios de nuevos conjuntos de cambios, dice que son de Anonymous porque no reconoce la dirección de correo electrónico en mi.gitconfig
... al menos, esa es mi teoría.
¿ Es posible especificar múltiples [user]
definiciones en .gitconfig
? ¿ O hay alguna otra forma de anular el valor predeterminado .gitconfig
para un directorio determinado? En mi caso, reviso todo el código de trabajo ~/worksrc/
: ¿hay alguna manera de especificar un .gitconfig
solo para ese directorio (y sus subdirectorios)?
Puede configurar un repositorio individual para utilizar un usuario/dirección de correo electrónico específico que anula la configuración global. Desde la raíz del repositorio, ejecute
git config user.name "Your Name Here"
git config user.email [email protected]
mientras que el usuario/correo electrónico predeterminado está configurado en su ~/.gitconfig
git config --global user.name "Your Name Here"
git config --global user.email [email protected]
Desde git 2.13 , es posible resolver esto utilizando las inclusiones condicionales recientemente introducidas .
Un ejemplo:
Configuración global ~/.gitconfig
[user]
name = John Doe
email = [email protected]
[includeIf "gitdir:~/work/"]
path = ~/work/.gitconfig
Configuración específica del trabajo ~/work/.gitconfig
[user]
email = [email protected]
Recuerde que [includeIf...]
debería seguir el valor predeterminado [user]
en la parte superior.
O puede agregar la siguiente información en su .git/config
archivo local
[user]
name = Your Name
email = [email protected]
Cambio de cuentas de github con un comando
Esta solución toma la forma de un único alias de git. Una vez ejecutado, el usuario actual del proyecto se adjuntará a otra cuenta.
Generar claves ssh
ssh-keygen -t rsa -C "[email protected]" -f '/Users/arnaudrinquin/.ssh/id_rsa'
[...]
ssh-keygen -t rsa -C "[email protected]" -f '/Users/arnaudrinquin/.ssh/id_rsa_pro'
Vincúlelos a sus cuentas de GitHub/Bitbucket
- copiar la clave pública predeterminada
pbcopy < ~/.ssh/id_rsa.pub
- inicie sesión en su cuenta de GitHub
- pega la clave en la
add SSH key
página de github - copiar otra clave pública
pbcopy < ~/.ssh/id_rsa_pro.pub
- repita y adapte los pasos 2 a 4 para cada otra cuenta
Paso 1. Cambio automático de clave ssh.
Podemos configurar ssh
para enviar un uso de una clave de cifrado específica dependiendo del archivo host
. Lo bueno es que puedes tener varios alias para el mismo hostname
.
Vea este ~/.ssh/config
archivo de ejemplo:
# Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# Professional github alias
Host github_pro
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_pro
configuración remota de git
Ahora puedes usar estos alias en los controles remotos de git cambiándolos [email protected]
por git@github_pro
.
Puede cambiar los controles remotos de sus proyectos existentes (usando algo como git remote set-url origin git@github_pro:foo/bar.git
) o adaptarlos directamente al clonarlos.
git clone [email protected]:ArnaudRinquin/atom-zentabs.git
usando alias, se convierte en:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Paso 2. Cambiar el correo electrónico de usuario de git
La configuración de Git puede ser global o por proyecto. En nuestro caso, queremos una configuración por proyecto. Es muy fácil cambiarlo:
git config user.email '[email protected]'
Si bien esto es fácil, a los desarrolladores que somos les lleva mucho tiempo. Podemos escribir un alias de git muy simple para eso.
Lo vamos a agregar al ~/.gitconfig
archivo.
[user]
name = Arnaud Rinquin
email = [email protected]
...
[alias]
setpromail = "config user.email '[email protected]'"
Luego, todo lo que tenemos que hacer es git setpromail
cambiar nuestro correo electrónico solo para este proyecto.
Paso 3. ¡¿Un cambio de comando, por favor?!
¿No sería bueno cambiar de una cuenta predeterminada a una especificada con un único comando sin parámetros? Esto definitivamente es posible. Este comando tendrá dos pasos:
- cambiar los controles remotos del proyecto actual a los alias elegidos
- cambiar la configuración actual del usuario.correo electrónico del proyecto
Ya tenemos una solución de un solo comando para el segundo paso, pero el primero es mucho más difícil. Cambio de host remoto con un comando
Aquí viene la solución en forma de otro comando de alias de git para agregar a su ~/.gitconfig
:
[alias]
changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
Esto permite cambiar todos los controles remotos de un host a otro (el alias). Vea el ejemplo:
$ > git remote -v
origin [email protected]:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin [email protected]:ArnaudRinquin/arnaudrinquin.github.io.git (push)
$ > git changeremotehost github.com github_pro
$ > git remote -v
origin git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (push)
combinarlos todos
Ahora solo nos queda combinar los dos comandos en uno, esto es bastante fácil. Vea cómo también integro la conmutación de host de Bitbucket.
[alias]
changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
setpromail = "config user.email '[email protected]'"
gopro = !sh -c \"git changeremotehost github.com github_pro && git changeremotehost bitbucket.com bitbucket_pro && git setpromail\"
Enlace fuente-Github
Enlace fuente -Tutorial