En mi ~/.gitconfig
, enumero mi dirección de correo electrónico personal [user]
, ya que eso es lo que quiero usar para repositorios de Github.
Pero, recientemente, también comencé a usar git para el trabajo. El repositorio git de mi empresa me permite comprometerme, 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 determinado directorio? 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)?
fuente
Respuestas:
Puede configurar un repositorio individual para usar una dirección de usuario / correo electrónico específica que anule la configuración global. Desde la raíz del repositorio, ejecute
mientras que el usuario / correo electrónico predeterminado está configurado en su ~ / .gitconfig
fuente
.git/config
archivogit config --edit
ygit config --global --edit
. Y en caso de que se haya perdido el comentario de Abizern , se encuentra el archivo de configuración de un repositorio<repo-root>/.git/config
.Git 2.13
lanzada hoy.Desde git 2.13 , es posible resolver esto usando las inclusiones condicionales recién introducidas .
Un ejemplo:
Configuración global ~ / .gitconfig
Trabajo específico config ~ / work / .gitconfig
fuente
git config --list
en diferentes directorios. En subdirectorios de~/work/
que contienen un repositorio git, elincludeIf
efecto surte efecto. Tenga en cuenta que en subdirectorios~/work/
que no contienen un repositorio git,includeIf
no se ejecuta.O puede agregar la siguiente información en su
.git/config
archivo localfuente
Un interruptor de cuentas de github de comando
Esta solución toma la forma de un solo alias git. Una vez ejecutado, el usuario actual del proyecto se adjuntará a otra cuenta
Generar claves ssh
Vincúlelos a sus cuentas de GitHub / Bitbucket
pbcopy < ~/.ssh/id_rsa.pub
add SSH key
página de githubpbcopy < ~/.ssh/id_rsa_pro.pub
Paso 1. Cambio automático de clave ssh.
Podemos configurar
ssh
para enviar un uso de una clave de cifrado específica según elhost
. Lo bueno es que puedes tener varios alias para el mismohostname
.Ver este
~/.ssh/config
archivo de ejemplo :configuración remota de git
Ahora puede usar estos alias en los controles remotos git cambiando
[email protected]
porgit@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.usando alias, se convierte en:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Paso 2. Cambiar git user.email
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:
Si bien esto es fácil, lleva mucho tiempo para los desarrolladores que somos. Podemos escribir un alias git muy simple para eso.
Lo vamos a agregar al
~/.gitconfig
archivo.Entonces, todo lo que tenemos que hacer es
git setpromail
cambiar nuestro correo electrónico solo para este proyecto.Paso 3. ¿Un interruptor de comando por favor?
¿No sería bueno cambiar de una cuenta predeterminada a una específica con un solo comando sin parámetros? Esto es definitivamente posible. Este comando tendrá dos pasos:
Ya tenemos una solución de un comando para el segundo paso, pero el primero es mucho más difícil. Un comando de cambio de host remoto
Aquí viene la solución en forma de otro comando git alias para agregar a su
~/.gitconfig
:Esto permite cambiar todos los controles remotos de un host a otro (el alias). Mira el ejemplo:
Combinarlos todos
Ahora solo tenemos que combinar los dos comandos en uno, esto es bastante fácil. Vea cómo también integro la conmutación de host bitbucket.
Enlace de origen - Tutorial
fuente
setpromail
alias hace unconfig --global
cambio (y tengo otros alias establecidos para configurar diferentes direcciones de correo electrónico). ¡Funciona!useConfigOnly = true
la otra respuesta.Después de inspirarme en la publicación del blog de Orr Sella, escribí un enlace previo al compromiso (que reside en
~/.git/templates/hooks
) que establecería nombres de usuario y direcciones de correo electrónico específicos basados en la información dentro de un repositorio local./.git/config
:Debe colocar la ruta al directorio de plantillas en su
~/.gitconfig
:A continuación, cada
git init
ogit clone
recogerá ese gancho y será de aplicación a los datos de usuario durante la siguientegit commit
. Si desea aplicar el gancho a repos ya existentes, simplemente ejecute ungit init
dentro del repositorio para reinicializarlo.Aquí está el gancho que se me ocurrió (todavía necesita un poco de pulido, las sugerencias son bienvenidas). Guárdalo como
o
y asegúrese de que sea ejecutable:
chmod +x ./post-checkout || chmod +x ./pre_commit
EDITAR:
Así que reescribí el gancho como un gancho y comando en Python. Además, también es posible llamar al script como un comando Git (
git passport
). También es posible definir un número arbitrario de ID dentro de un archivo de configuración (~/.gitpassport
) que se pueden seleccionar en una solicitud. Puede encontrar el proyecto en github.com: git-passport: un comando y gancho de Git escrito en Python para administrar múltiples cuentas de Git / identidades de usuario .fuente
chmod +x post-checkout
, 2. losgit_remotes
valores son la parte inicial del nombre de host completo, por ejemplo[email protected]
, 3. loslocal_id
valores deben ser editados por el usuario a sus respectivos nombres y direcciones de correo electrónico.git init
nuevos proyectos desde un IDE comoeclipse
(que no puede manejar desencadenantes de precompromiso interactivos)Si no desea tener una dirección de correo electrónico predeterminada ( enlaces de direcciones de correo electrónico a un usuario de github ), puede configurar que desee que se le pregunte. Cómo puedes hacer eso depende de la versión de git que uses, ver más abajo.
El inconveniente (previsto) es que debe configurar su dirección de correo electrónico (y su nombre) una vez para cada repositorio. Entonces, no puedes olvidarte de hacerlo.
Versión <2.7.0
en su configuración global
~/.gitconfig
como se indica en un comentario de Dan Aloni en la publicación del blog de Orr Sella . Al intentar hacer la primera confirmación en un repositorio, git falla con el bonito mensaje:El nombre se toma de la configuración global cuando la dirección de correo electrónico se configura localmente (el mensaje no es perfectamente preciso).
2.7.0 ≤ Versión <2.8.0
El comportamiento en las versiones <2.7.0 no fue intencionado y se solucionó con 2.7.0. Todavía puede usar un enlace previo a la confirmación como se describe en la publicación del blog de Orr Sella . Esta solución también funciona para otras versiones, pero las otras soluciones no son para esta versión.
Versión ≥ 2.8.0
Dan Aloni agregó una opción para lograr ese comportamiento (ver notas de la versión ). Úselo con:
Para que funcione, no puede dar un nombre o dirección de correo electrónico en la configuración global. Luego, en la primera confirmación, aparece un mensaje de error
Por lo tanto, el mensaje no es muy instructivo, pero como configura la opción explícitamente, debe saber qué hacer. A diferencia de la solución de las versiones <2.7.0, siempre debe configurar el nombre y el correo electrónico manualmente.
fuente
git bisect
encontrar que commit 19ce497c ... introdujo este comportamiento. Sin embargo, independientemente de la versión (2.5 - 2.7) puedo usaremail =
(sin argumento) en la configuración y muestra el mismo comportamiento queemail = "(none)"
en versiones anteriores. ¿Puedes confirmar esto? Si es así, editaré mi respuesta. Soy escéptico ya que parece tan obvio y no lo usé antes.email =
en 2.7.0, Git todavía adivina la dirección de correo electrónico basada en el nombre de usuario y el nombre de host. Ahora uso elpre-commit
enfoque en el blog de Sella. También notifiqué al Dan Aloni a quien se le ocurrió la"(none)"
idea en la publicación de Sella y archivó un parche para implementarlo formalmente como una característica: permalink.gmane.org/gmane.comp.version-control.git/285301Con las condiciones condicionales incluidas en Git 2.13, ahora es posible tener múltiples usuarios / correos electrónicos coexistiendo en una máquina con poco trabajo.
user.gitconfig
tiene mi nombre personal y correo electrónicowork-user.gitconfig
tiene mi nombre de trabajo y correo electrónico. Ambos archivos están en~
camino.Entonces mi nombre personal / correo electrónico se aplica por defecto. Para
c:/work/
dir, se aplica mi nombre de trabajo / correo electrónico. Parac:/work/github/
dir, se aplica mi nombre personal / correo electrónico. Esto funciona cuando se aplica la última configuración.gitdir
es sensible agitdir/i
mayúsculas y minúsculas."gitdir/i:github/"
aplicaría la inclusión condicional para cualquier directorio congithub
en su ruta.fuente
gitdir/i
me ayudó (que su respuesta no menciona).Otra opción para
git
trabajar con múltiples nombres / correos electrónicos es aliasgit
y usar el-c
indicador para anular la configuración global y específica del repositorio.Por ejemplo, al definir un alias:
Para ver si funciona, simplemente escriba
git config user.email
:En lugar de un alias, también puedes poner un
git
ejecutable personalizado dentro de tu$PATH
.Una ventaja de este método sobre un repositorio específico
.git/config
es que se aplica a cadagit
repositorio cuando elgit
programa personalizado está activo. De esta manera, puede cambiar fácilmente entre usuarios / nombres sin modificar ninguna configuración (compartida).fuente
alias git (y secciones en configuraciones git) al rescate!
agregue un alias (desde la línea de comando):
luego, establecer, por ejemplo
y en un repositorio nuevo o clonado puede ejecutar este comando:
Esta solución no es automática, pero el usuario desarmado y el correo electrónico en su mundial
~/.gitconfig
y el establecimientouser.useConfigOnly
detrue
forzaría git para recordarle que debe configurar manualmente en cada repo nuevo o clonado.fuente
Aquí están los pasos completos después de leer muchas respuestas aquí.
Cómo configurar múltiples configuraciones de claves SSH para diferentes cuentas de github
Es posible que desee comenzar a verificar sus claves guardadas actualmente
Si decide eliminar todas las claves almacenadas en caché antes ( opcional, tenga cuidado al respecto )
Luego puede crear una clave ssh pub / priv vinculada a cada correo electrónico / cuenta que desee / necesite usar
Después de ejecutar estos comandos, tendrá los siguientes archivos creados
Asegúrese de que el agente de autenticación se esté ejecutando
Agregue las claves generadas de la siguiente manera (desde la carpeta ~ / .ssh)
Ahora puede verificar sus claves guardadas nuevamente
Ahora debe agregar las claves públicas generadas a las claves de acceso de su servidor github / bickbuket
Clone cada uno de los repositorios en diferentes carpetas
Vaya a la carpeta donde trabajará el usuario y ejecute esto
Solo para ver qué hace esto, verifique el contenido de ".git / config"
Vaya a la carpeta donde trabajará el usuario pers y ejecute esto
Solo para ver qué hace esto, verifique el contenido de ".git / config"
Después de todo esto, podrá confirmar su código personal y de trabajo simplemente cambiando entre esas dos carpetas
En caso de que esté utilizando Git Bash y necesite generar claves ssh en Windows, siga estos pasos:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
fuente
Hay una solución simple que parece funcionar bien para evitar errores.
Simplemente elimine la
[user]
sección de su~/.gitconfig
, lo que le impedirá realizar confirmaciones sin configuraruser.name
para cada repositorio.En su
~/.bashrc
, agregue algunos alias simples para el usuario y el correo electrónico:fuente
Esta respuesta está parcialmente inspirada en la publicación de @Saucier, pero estaba buscando una forma automática de configurar
user.name
yuser.email
según el repositorio, basada en el control remoto, que fuera un poco más liviana que el paquete de pasaporte git que desarrolló . También h / t a @John para la configuración useConfigOnly. Aquí está mi solución:.gitconfig
cambios:gancho posterior al pago que debe guardarse en la siguiente ruta
~/.git-templates/hooks/post-checkout
:Utilizo diferentes credenciales para github y gitlab, pero esas referencias en el código anterior podrían reemplazarse o aumentarse con cualquier servicio que use. Para que el enlace posterior al pago establezca automáticamente el nombre de usuario y el correo electrónico localmente para un repositorio después de un pago, asegúrese de que el nombre del servicio aparezca en la URL remota, agréguelo a la matriz de servicios en el
post-checkout
script y cree una sección para él en su.gitconfig
que contiene su nombre de usuario y correo electrónico para ese servicio.Si ninguno de los nombres de servicio aparece en la URL remota o el repositorio no tiene un control remoto, el nombre de usuario y el correo electrónico no se establecerán localmente. En estos casos, la
user.useConfigOnly
configuración estará en juego, lo que no le permitirá realizar confirmaciones hasta que el nombre de usuario y el correo electrónico se establezcan en el nivel de repositorio, y le solicitará al usuario que configure esa información.fuente
chmod 755
del guión de gancho. De lo contrario, se copiará pero nunca se ejecutará.GIT_AUTHOR_EMAIL
+ local.bashrc
.bashrc_local
: no rastree este archivo, póngalo solo en su computadora de trabajo:.bashrc
: rastrea este archivo, hazlo igual en las computadoras del trabajo y del hogar:Estoy usando https://github.com/technicalpickles/homesick para sincronizar mis archivos de puntos.
Si solo gitconfig aceptara variables de entorno: Expansión de variables de shell en git config
fuente
Entorno de Windows
Adicional esto se puede modificar desde
Git Extensions --> Settings --> Global Settings
, si lo tiene instalado en sus sistemas.gitextensions-latest-release
Haga clic derecho en una carpeta / directorio en el entorno de Windows para acceder a esta configuración.
Actualización : Cómo cambiar / mantener múltiples configuraciones en la Versión 2.49
fuente
Tal vez es un simple truco, pero es útil. Simplemente genere 2 claves ssh como a continuación.
Del mismo modo crea uno más para lo personal. Entonces, tienes 2 claves ssh, trabajo y compañía. Copie work.pub, work, personal.pub, personal en ~ / .ssh / Directory.
Luego cree un script de shell con las siguientes líneas y asígnele el nombre crev.sh (Company Reverse) con el siguiente contenido.
Del mismo modo, cree uno más llamado prev.sh (Personal Reverse) con el siguiente contenido.
en ~ / .bashrc agrega alias para esos scripts como a continuación
Siempre que quiera usar compañía, solo haga crev, y si quiere usar personal, haga prev :-p.
Agregue esas claves ssh a sus cuentas de GitHub. Asegúrese de que no haya generado id_rsa anteriormente, porque esos scripts sobrescribirán id_rsa. Si ya ha generado id_rsa, úselo para una de las cuentas. Cópielos como personales y omita la generación de claves personales.
fuente
Hice una función bash que maneja eso. Aquí está el repositorio de Github .
Para el registro:
fuente
Simplemente agregue esto a su ~ / .bash_profile para cambiar entre las teclas predeterminadas para github.com
fuente
También puede usarlo
git commit --author "Your Name <[email protected]>"
en el momento de realizar una confirmación en un repositorio donde desea comprometerse como un usuario diferente.fuente
Algo así como la respuesta de Rob W , pero que permite una clave ssh diferente y funciona con versiones anteriores de git (que no tienen, por ejemplo, una configuración core.sshCommand).
Creé el archivo
~/bin/git_poweruser
, con permiso ejecutable, y en la RUTA:Cada vez que quiero comprometer o empujar algo como "Usuario avanzado", lo uso en
git_poweruser
lugar degit
. Debería funcionar en cualquier directorio, y no requiere cambios en ,.gitconfig
o.ssh/config
al menos no en el mío.fuente
Aunque la mayoría de las preguntas respondieron al OP, solo tuve que pasar por esto yo mismo y sin siquiera buscar en Google pude encontrar la solución más rápida y sencilla. Aquí hay pasos simples:
.gitconfg
de su otro repositorio.gitconfig
archivo, como nombre, correo electrónico y nombre de usuario[user] name = John email = [email protected] username = john133
.gitignore
lista, para asegurarse de no comprometer el.gitconfig
archivo en su repositorio de trabajofuente