Confirmar GIT como usuário diferente sem e-mail / ou apenas e-mail


127

Estou tentando confirmar algumas alterações como um usuário diferente, mas não tenho um endereço de email válido, o seguinte comando não está funcionando para mim:

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

Tenho o mesmo problema ao tentar confirmar apenas com um endereço de email

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

Nas páginas de manual do GIT para o comando commit, ele diz que posso usar o

standard A U Thor <author@example.com> format

Para a opção --author.

Onde esse formato é definido? o que A e U representam? como faço para confirmar para um usuário diferente com apenas um nome de usuário ou apenas um email?


3
AU não significa nada, é apenas um exemplo: AU Thor => AUThor => Autor . Você pode especificar o que quiser como nome.
Samy Dindane

1
Eu sei que AU Thor forma Autor, eu queria saber se havia algum significado na separação.
Willem D'Haeseleer

Respostas:


142

O formato mínimo exigido do autor, conforme indicado nesta resposta do SO , é

Name <email>

No seu caso, isso significa que você deseja escrever

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

De acordo com o comentário de Willem D'Haeseleer, se você não tiver um endereço de e-mail, poderá usar <>:

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

Conforme escrito na git commitpágina de manual à qual você vinculou, se você fornecer algo menor que isso, é usado como um token de pesquisa para pesquisar confirmações anteriores, procurando outras confirmações desse autor.


28
Acabei de descobrir que, se você não tiver um endereço de e-mail, também poderá digitar "name <>", para explicitamente deixá-lo em branco em vez de digitar o nome falso.
Willem D'Haeseleer

2
Se você usar "name <>"e git commit --amenddepois, falhará com invalid identerro; então não faça
sanmai

7
Aparentemente, mesmo ao usar essa opção, você ainda precisa definir user.email e user.name na sua configuração do git, caso contrário o git reclama.
Qwertzguy

51

O formato específico é:

git commit --author="John Doe <john@doe.com>" -m "Impersonation is evil." 

1
Por que não exige a senha de John Doe se você confirma o nome dele?
Narek

3
@Narek O que seria isso neste contexto?
Pmr

37

o

formato padrão AU Thor <author@example.com>

Parece ser definido da seguinte forma: (tanto quanto eu sei, com absolutamente nenhuma garantia)

AU Thor = nome de usuário obrigatório

  • A separação dos personagens provavelmente indica que os espaços são permitidos, também pode ser semelhante a iniciais.
  • O nome de usuário deve ser seguido por 1 espaço, os espaços extras serão truncados

<author@example.com> = endereço de email opcional

  • Sempre deve estar entre <> sinais.
  • O formato do endereço de e-mail não é validado. Você pode digitar o que quiser
  • Opcional, você pode omitir isso explicitamente usando <>

Se você não usar essa sintaxe exata, o git pesquisará as confirmações existentes e usará a primeira confirmação que contém a string fornecida.

Exemplos:

  1. Apenas nome de usuário

    Omita o endereço de email explicitamente:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. Somente email

    Tecnicamente, isso não é possível. No entanto, você pode inserir o endereço de email como o nome de usuário e omitir explicitamente o endereço de email. Isso não parece muito útil. Eu acho que faria ainda mais sentido extrair o nome de usuário do endereço de email e usá-lo como o nome de usuário. Mas se você precisar:

    git commit --author="john@doe.com <>" -m "Impersonation is evil." 
    

Corri para isso ao tentar converter um repositório de mercurial para git. Testei os comandos no msysgit 1.7.10.


13

Basta suplementar:

git commit --author = "john@doe.com" -m "A representação é má."

Em alguns casos, a confirmação ainda falha e mostra a seguinte mensagem:

*** Por favor me diga quem você é.

Corre

git config --global user.email "you@example.com" git config --global user.name "Seu Nome"

para definir a identidade padrão da sua conta. Omita --global para definir a identidade apenas neste repositório.

fatal: não foi possível detectar automaticamente o endereço de e-mail (obteve xxxx)

Então, basta executar "git config" e, em seguida, "git commit"


Era disso que eu precisava. Eu tenho nome de usuário e email separados para um GitHub corporativo e o GitHub público. Eu precisava definir meu repo atual para usar meu nome de usuário e email públicos do GitHub para poder enviar minhas alterações sem expor um email particular.
TBirkulosis

8

Formato

A U Thor <author@example.com>

significa simplesmente que você deve especificar

FirstName MiddleName LastName <email@example.com>

Parece que o sobrenome e o sobrenome são opcionais (talvez a parte antes do email não tenha um formato estrito). Tente, por exemplo, o seguinte:

git commit --author="John <john@doe.com>" -m "some fix"

Como dizem os 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.

se você não usar esse formato, o git tratará a string fornecida como um padrão e tentará encontrar o nome correspondente entre os autores de outras confirmações.


Não existe esse nome como nome do meio sobrenome . Veja isso .
Samy Dindane

3

A --authoropção não funciona:

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

Isto faz:

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

Este é o único que funcionou para mim. Observe que a ordem é importante. git commit -c user.name="j bloggs" -am "message"dá um errofatal: Option -m cannot be combined with -c/-C/-F
Martin

2

Abra o Git Bash.

Defina um nome de usuário do Git:

$ git config --global user.name "name family" Confirme se você definiu o nome de usuário do Git corretamente:

$ git config --global user.name

nome da família

Defina um email do Git:

$ git config --global user.email email@foo.com Confirme se você configurou o email Git corretamente:

$ git config --global user.email

email@foo.com


0

Tudo depende de como você se compromete.

Por exemplo:

git commit -am "Some message"

usará seu ~\.gitconfignome de usuário. Em outras palavras, se você abrir esse arquivo, verá uma linha parecida com esta:

[user]
    email = someemail@gmail.com

Esse seria o email que você deseja alterar. Se você está fazendo uma solicitação pull através do Bitbucket ou Github etc., você será quem estiver conectado como.


0

Uma alternativa se a preocupação é ocultar o endereço de email real ... Se você está se comprometendo com o Github, não precisa de um email real, pode usar<username>@users.noreply.github.com

Independentemente de usar ou não o Github, você provavelmente deseja primeiro alterar os detalhes do seu committer (no Windows use SET GIT_...)

GIT_COMMITTER_NAME='username' 
GIT_COMMITTER_EMAIL='username@users.noreply.github.com'

Em seguida, defina o autor

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

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


Ao contrário de todas as outras soluções, isso funciona quando você não inicializou user.email/user.name inicialmente.
Andy

-2

Execute estes dois comandos no terminal para definir o email e o nome do usuário

 git config --global user.email "you@example.com" 

 git config --global user.name "your name" 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.