GIT se compromete como usuario diferente sin correo electrónico / o solo correo electrónico

127

Estoy tratando de confirmar algunos cambios como un usuario diferente, pero no tengo una dirección de correo electrónico válida, el siguiente comando no funciona para mí:

git commit --author="john doe" -m "some fix"
fatal: No existing author found with 'john doe'

Tengo el mismo problema cuando intento comprometerme solo con una dirección de correo electrónico

git commit --author="[email protected]" -m "some fix"
fatal: No existing author found with '[email protected]'

En las páginas de manual de GIT para el comando commit dice que puedo usar el

standard A U Thor <[email protected]> format

Para la opción --autor.

¿Dónde se define este formato? ¿Qué significan A y U? ¿Cómo me comprometo para un usuario diferente con solo un nombre de usuario o solo un correo electrónico?

Willem D'Haeseleer
fuente
3
AU no significa nada, es solo un ejemplo: AU Thor => AUThor => Autor . Puede especificar lo que quiera como nombre.
Samy Dindane
1
Sé que AU Thor forma Autor, me preguntaba si había algún significado en la separación.
Willem D'Haeseleer

Respuestas:

142

El formato de autor mínimo requerido, como se sugiere en esta respuesta SO , es

Name <email>

En tu caso, esto significa que quieres escribir

git commit --author="Name <email>" -m "whatever"

Según el comentario de Willem D'Haeseleer, si no tiene una dirección de correo electrónico, puede usar <>:

git commit --author="Name <>" -m "whatever"

Como está escrito en la git commitpágina de manual a la que se vinculó, si proporciona algo menos que eso, se utiliza como un token de búsqueda para buscar confirmaciones anteriores, buscando otras confirmaciones de ese autor.

eykanal
fuente
28
Me acabo de enterar de que si no tiene una dirección de correo electrónico, también puede escribir "nombre <>" para dejarla explícitamente en blanco en lugar de ingresarla como falsa.
Willem D'Haeseleer
2
Si usa "name <>", y git commit --amenddespués, fallará con invalid identerror; así que no lo hagas
sanmai
77
Aparentemente, incluso cuando se usa esa opción, aún debe haber configurado user.email y user.name en su configuración de git, de lo contrario, git se queja.
qwertzguy
51

El formato específico es:

git commit --author="John Doe <[email protected]>" -m "Impersonation is evil." 
pmr
fuente
1
¿Por qué no requiere la contraseña de John Doe si te comprometes con su nombre?
Narek
3
@Narek ¿Qué sería eso en este contexto?
pmr
37

los

formato estándar AU Thor <[email protected]>

Parece definirse de la siguiente manera: (que yo sepa, sin ninguna garantía)

AU Thor = nombre de usuario requerido

  • La separación de los caracteres probablemente indica que se permiten espacios, también podría parecerse a las iniciales.
  • El nombre de usuario debe ir seguido de 1 espacio, los espacios adicionales se truncarán

<[email protected]> = dirección de correo electrónico opcional

  • Siempre debe estar entre signos <>.
  • El formato de la dirección de correo electrónico no está validado, puedes ingresar lo que quieras
  • Opcional, puede omitir esto explícitamente usando <>

Si no usa esta sintaxis exacta, git buscará a través de las confirmaciones existentes y utilizará la primera confirmación que contiene la cadena proporcionada.

Ejemplos:

  1. Solo nombre de usuario

    Omita la dirección de correo electrónico explícitamente:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. Solo correo electrónico

    Técnicamente esto no es posible. Sin embargo, puede ingresar la dirección de correo electrónico como nombre de usuario y omitir explícitamente la dirección de correo electrónico. Esto no parece ser muy útil. Creo que tendría aún más sentido extraer el nombre de usuario de la dirección de correo electrónico y luego usarlo como nombre de usuario. Pero si tienes que:

    git commit --author="[email protected] <>" -m "Impersonation is evil." 
    

Me encontré con esto cuando trataba de convertir un repositorio de mercurial a git. Probé los comandos en msysgit 1.7.10.

Willem D'Haeseleer
fuente
13

Solo suplemento:

git commit --author = "[email protected]" -m "La suplantación es malvada".

En algunos casos, la confirmación aún falla y le muestra el siguiente mensaje:

*** Por favor dime quién eres.

correr

git config --global user.email "[email protected]" git config --global user.name "Tu nombre"

para configurar la identidad predeterminada de su cuenta. Omitir --global para establecer la identidad solo en este repositorio.

fatal: no se puede detectar automáticamente la dirección de correo electrónico (tiene xxxx)

Así que simplemente ejecute "git config", luego "git commit"

qinxian
fuente
Esto es lo que necesitaba. Tengo un nombre de usuario y correo electrónico separados para un GitHub corporativo y el GitHub público. Necesitaba configurar mi repositorio actual para usar mi nombre de usuario y correo electrónico público de GitHub para poder impulsar mis cambios sin exponer un correo electrónico privado.
TBirkulosis
8

Formato

A U Thor <[email protected]>

simplemente significa que debes especificar

FirstName MiddleName LastName <[email protected]>

Parece que el segundo nombre y el apellido son opcionales (tal vez la parte anterior al correo electrónico no tiene un formato estricto). Pruebe, por ejemplo, esto:

git commit --author="John <[email protected]>" -m "some fix"

Como dicen los documentos:

  --author=<author>
       Override the commit author. Specify an explicit author using the standard 
       A U Thor <[email protected]> format. Otherwise <author> is assumed to 
       be a pattern and is used to search for an existing commit by that author 
       (i.e. rev-list --all -i --author=<author>); the commit author is then copied 
       from the first such commit found.

Si no usa este formato, git trata la cadena proporcionada como un patrón e intenta encontrar un nombre coincidente entre los autores de otras confirmaciones.

KL-7
fuente
No hay tal cosa como nombre, segundo nombre, apellido . Mira esto .
Samy Dindane
3

La --authoropción no funciona:

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

Esto hace:

git -c user.name='A U Thor' -c [email protected] commit
usuario2394284
fuente
Este es el único que funcionó para mí. Tenga en cuenta que el orden es importante. git commit -c user.name="j bloggs" -am "message"da un errorfatal: Option -m cannot be combined with -c/-C/-F
Martin
2

Abre Git Bash.

Establecer un nombre de usuario Git:

$ git config --global user.name "name family" Confirme que ha configurado el nombre de usuario Git correctamente:

$ git config - nombre de usuario global

nombre de familia

Establecer un correo electrónico de Git:

$ git config --global user.email [email protected] Confirme que ha configurado el correo electrónico Git correctamente:

$ git config: usuario global correo electrónico

[email protected]

Un mo
fuente
0

Todo depende de cómo te comprometas.

Por ejemplo:

git commit -am "Some message"

usará su ~\.gitconfignombre de usuario. En otras palabras, si abre ese archivo, debería ver una línea que se ve así:

[user]
    email = [email protected]

Ese sería el correo electrónico que desea cambiar. Si está haciendo una solicitud de extracción a través de Bitbucket o Github, etc., será quien sea que haya iniciado sesión.

Cañón Kolob
fuente
0

Una alternativa si la preocupación es ocultar la dirección de correo electrónico real ... Si se está comprometiendo con Github, no necesita un correo electrónico real que pueda usar<username>@users.noreply.github.com

Independientemente de usar Github o no, probablemente primero quieras cambiar los detalles de tu committer (en el uso de Windows SET GIT_...)

GIT_COMMITTER_NAME='username' 
GIT_COMMITTER_EMAIL='[email protected]'

Luego establece el autor

git commit --author="username <[email protected]>"

https://help.github.com/articles/keeping-your-email-address-private

KCD
fuente
A diferencia de todas las otras soluciones, esto funciona cuando no ha inicializado user.email/user.name inicialmente.
Andy
-2

Ejecute estos dos comandos desde la terminal para configurar el correo electrónico y el nombre del usuario

 git config --global user.email "[email protected]" 

 git config --global user.name "your name" 
Diptendu Das
fuente