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="john@doe.com" -m "some fix"
fatal: No existing author found with 'john@doe.com'

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

standard A U Thor <author@example.com> 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?


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.


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 <john@doe.com>" -m "Impersonation is evil." 

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 <author@example.com>

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

<author@example.com> = 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="john@doe.com <>" -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.


13

Solo suplemento:

git commit --author = "john@doe.com" -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 "you@example.com" 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"


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 <author@example.com>

simplemente significa que debes especificar

FirstName MiddleName LastName <email@example.com>

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 <john@doe.com>" -m "some fix"

Como dicen los documentos:

  --author=<author>
       Override the commit author. Specify an explicit author using the standard 
       A U Thor <author@example.com> 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.


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 "you@example.com"
  git config --global user.name "Your Name"

Esto hace:

git -c user.name='A U Thor' -c user.email=author@example.com commit

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@foo.com Confirme que ha configurado el correo electrónico Git correctamente:

$ git config: usuario global correo electrónico

email@foo.com


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 = someemail@gmail.com

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.


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='username@users.noreply.github.com'

Luego establece el autor

git commit --author="username <username@users.noreply.github.com>"

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


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 "you@example.com" 

 git config --global user.name "your name" 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.