git empurra com o usuário errado do terminal

112

Eu tenho um problema com o git e meu terminal.

Aqui está uma galeria para mostrar meu problema: http://imgur.com/a/6RrEY

Quando eu envio commits do meu terminal, git diz que eu os empurro com outro nome de usuário, que é um usuário da minha organização (minha empresa) sem nenhum commit e parece que não pertence a ninguém: (verifique a primeira foto da galeria)

Mas isso não acontece quando eu uso o Github para mac, no feed vejo os commits empurrados por mim mesmo.

O problema também afeta meus repositórios pessoais, meu terminal diz que não tenho permissão para enviar commits nesses repositórios (o que é obviamente errado), uma vez que tenta enviá-lo com este usuário: (verifique a segunda foto da galeria)

Adivinha ? Isso não acontece com o Github para mac também.

Eu mudei meu computador para um novo há alguns dias, então eu redefini todas as minhas chaves ssh do github e deixei apenas uma nova gerada pelo Github para Mac, então eu não acho que haja algum usuário fantasma / chave ssh escondida em algum lugar, este disco rígido é novo: (verifique a terceira foto da galeria)

Meu arquivo .gitconfig está limpo, há apenas minhas credenciais: (verifique a quarta foto da galeria)

Eu realmente não entendo, ajude, StackOverflow, você é minha única esperança.

(Minhas desculpas por minhas pobres habilidades no Gimp e pela referência de Star Wars)

EDITAR: ssh-add -l mostra apenas a boa chave ssh criada pelo github para mac e eu tenho apenas uma conta no github

EDIT2: ssh -T [email protected] reconheça-me como o bom usuário.

EDIT3: Depois de alguns testes, parece que meu terminal faz commits com meu nome de usuário, mas os empurra com o outro, Github para mac commits e empurra com o bom nome de usuário. Essa situação acontece com cada repo que tenho / faço (mesmo os novos uns).

EDIT4: Em um repositório pessoal git log --pretty="%h %an %ae"mostra meu bom nome de usuário

EDIT5: Nenhum sinal de variáveis ​​de ambiente que substituiriam minhas credenciais no meu env. Mesmo se eu tentar definir essas variáveis ​​com boas credenciais, o problema persiste.

EDIT6: As coisas funcionam normalmente se eu forçar o usuário no caminho /.git/configde um repositório, mas não acho que seja uma boa opção:http://[email protected]/USER/REPO.git

EDIT7: Excluímos o usuário git que enviou os commits para mim e isso traz outro erro:remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/USER/REPO.git/'

EDIÇÃO FINAL: Instalei o git com homebrew, digitei git config --global push.default simple e agora ele leva minhas credenciais mesmo sem forçar o usuário. Isso é estranho. Obrigado a todos pela ajuda, vocês são ótimos caras!

Yinfei
fonte
2
verificar ~/.gitconfige $project_root/.git/configarquivos. Um desses dois certamente está mal configurado para nome de usuário.
mu 無
1
Obrigado pela sua resposta ansh0l. ~/.gitconfigé claro e assim é $project_root/.git/config. Na verdade, tenho esse problema com todos os projetos pessoais, projetos de trabalho podem ser empurrados, pois esse outro usuário pertence à minha organização que possui esses repositórios.
Yinfei
Você tem várias contas no github, então? Um para companhia, outro para uso pessoal?
mu 無
Não, apenas um para tudo.
Yinfei
1
Uma solução irritante seria apenas regenerar outra chave SSH. Se você estiver usando sua chave SSH atual com outro serviço, seria inútil.
Eduardo Bautista

Respostas:

168

Eu só tive esse problema no trabalho. O git integrado que vem com o mac ou quando você instala o xcode armazena as credenciais do git no keychain. A solução para mim foi:

iniciar o acesso do keychain (iniciar o destaque via cmd + espaço, digite keychain, pressione Enter)

Abaixo de chaveiros no canto superior esquerdo, selecione "login" Na categoria à esquerda, selecione "senhas"

encontre o nome "github" e exclua-o.

usuário542833
fonte
2
Certifique-se de excluir todas as entradas do github aqui e definir a configuração de login * git config --global user.name <nome> * git config --global user.email <email>
Shank_Transformer
No meu caso, SourceTree estava enfrentando esse problema. Excluir o item no chaveiro corrigiu isso!
Shoerob 01 de
1
@Shank_Transformer sua solução funcionou para mim! Obrigado!
Nazariy
Você pode ter que pesquisar (ou iniciar diretamente) seahorseno Ubuntu.
caw
3
Estou em dívida com o senhor
Baconbeastnz
46

O github identifica você pela chave ssh que vê, não por qualquer configuração do git.

Portanto, você precisa garantir que a chave ssh de sua conta de trabalho não esteja em seu chaveiro ao tentar empurrar de sua conta pessoal e vice-versa.

Use ssh-add -lpara determinar quais chaves estão em seu chaveiro e ssh-add -d <keyfile>para remover uma chave de seu chaveiro, se for necessário remover a chave ssh 'indesejada' ~/.ssh/config.

fonte

NB: Github ainda identificará seu commit baseado apenas no e-mail.

Nithin
fonte
5
Esta é a única resposta que explica por que estava usando persistentemente a conta github errada, apesar de eu user.emailestar configurado corretamente. Gostaria de poder votar cinco vezes.
Chris
1
no meu caso, remover a chave ssh funcionou ssh-add -D
perfeitamente
Esta foi a única resposta que funcionou para mim. Obrigado!!
Edward Hartnett
A única opção que funcionou. Não faz sentido porque o git não escolheria a chave certa. Como estamos mencionando o arquivo ssh, ele deve ser usado na configuração.
Revanth Kumar
Quando faço ssh-add -lisso, recebo uma resposta que não ajuda. Digita 4096 SHA256:lotsOfGibberish,about40chars (RSA)não sei como nos dar essa informação.
MiguelMunoz
20

Apesar de todas as ótimas opções oferecidas por outros usuários, a única maneira de consertar isso era reinstalar o git completamente e digitar git config --global push.default simplepara reescrever boas credenciais.

Yinfei
fonte
@VonC, apesar de sua resposta ter sido ótima, não funcionou de jeito nenhum. Esta é a única solução que funcionou para mim. Eu me pergunto se é o problema do git ou OSX ...
swilgosz
40
git config --system --unset credential.helperfuncionou para mim, agora são solicitadas minhas credenciais do GitHub no push novamente e posso fornecer o ID de usuário e a senha corretos.
CodeManX
@CoDEmanX sua foi a única resposta que funcionou para mim. Para qualquer outra pessoa que se deparar com isso, é porque usamos 2FA no trabalho com o github e eu precisava primeiro gerar um token do github gui e usá-lo como minha senha na linha de comando depois de redefinir minhas credenciais locais! verifique https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ para obter detalhes
vancouverwill
É apenas o arquivo .gitconfig. Remova ou redefina ... Enfrentei esse problema quando enviei um projeto de teste para uma entrevista. Droga, isso dói. Está com o arquivo de configuração
Girish
git config --system --unset credential.helpernão funciona no Windows 10 git bash:error: could not lock config file C:/Program Files/Git/mingw64/etc/gitconfig: Permission denied
alex
17

Estou usando o Windows 10 e enfrentei o mesmo problema hoje. No meu caso, minhas credenciais de usuário diferente foram salvas pelo gerenciador de credenciais do Windows. Assim, excluindo / desmarcando credenciais git com o comando abaixo, git config --global --unset credential.helper

não ajudou. Tive que excluir manualmente a entrada no Windows seguindo o caminho abaixo,

Iniciar -> Painel de controle ---> Contas de usuário ---> Gerenciar suas credenciais ---> Credenciais do Windows

Em seguida, procure uma entrada como git: https://github.com e remova-a. Funciona bem depois disso.

Gowtham
fonte
Obrigado Gowtham
Balint
Obrigado, nunca tive esse problema antes no Windows, mas hoje tive esse problema e estou feliz em ver seu comentário aqui.
RaKoDev
Você diz que "não ajudou", mas se ele deu a mensagem de que não foi possível bloquear o arquivo de configuração, o problema é simplesmente que você precisa executá-lo em um prompt de comando elevado, como foi apontado em um comentário acima .
Stefan
15

parece que meu terminal faz commits com meu nome de usuário, mas os empurra com o outro

O nome do autor e do committer e o e-mail (que são importantes para o GitHub) são derivados de:

git config user.name
git config user.email

No entanto, conforme mencionado em git confige git commit-tree, esses valores podem ser substituídos por variáveis ​​de ambiente:

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL

Portanto, verifique novamente essas variáveis.

As coisas funcionam normalmente se eu forçar o usuário a .git/configsair de um repositório, mas não acho que seja uma boa opção.

Mas deve ser uma boa solução.
Ao usar uma url https, sempre especifico o usuário nela para garantir que a autenticação seja feita com o usuário certo.

http://[email protected]/USER/REPO.git
VonC
fonte
Obrigado pela sua resposta VonC! Infelizmente, minhas git configcredenciais estão corretas e não há variáveis ​​de ambiente definidas em meu /username/.bashrcarquivo ...
Yinfei
@ Yinfei84 no entanto, verifique o seu resultado ' env'.
VonC
@ Yinfei84 o que aconteceria se (para testar) você configurasse essas variáveis ​​explicitamente e tentasse um commit e um push. Isso funcionaria melhor então?
VonC de
Acabei de fazer isso e o problema persiste.
Yinfei
2
Desculpe-me se fui claro, eu quis dizer que funcionaria se eu forçasse o usuário no caminho como:http://[email protected]/USER/REPO.git
Yinfei
9

Uma solução temporária é executada primeiro e, em killall ssh-agentseguida, adicione as chaves ssh geradas para a conta que você precisa usarssh-add ~/.ssh/id_4shameer

Isso nos ajudará a trabalhar em várias contas github quando obtermos o erro do tipo ERROR: Permission to user/repo-git.git denied to username.

mshameer
fonte
1
Eu fiz isso depois de remover qualquer entrada do Github do chaveiro do MacOS , e funcionou perfeitamente. Dois pontos, após o killall, o ssh-agent deve ser reiniciado com eval "$(ssh-agent -s)", e o ssh-addcomando deve ser executado com sudo.
arvymetal
7

Se você estiver usando MAC, vá para Keychain Access e remova a entrada do usuário para o qual você não deseja acesso git.

Chitrapal Singh
fonte
4

A solução para mim foi adicionar uma entrada no meu arquivo ~ / .ssh / config para o github. Eu tive que fazer isso porque:

  1. Eu tinha várias contas do github com a mesma chave (não faça isso!)
  2. quando você faz um 'git push' usando ssh, seu computador pega id_rsa por padrão e usa-o como sua identidade ssh.
  3. O github não pode (sem surpresa) desconfigurar qual conta você quer dizer, já que está baseando a conta na chave que é apresentada, que se vinculada a mais de uma conta, leva a problemas como esse. O assassino é que, por muito tempo, eu estava fugindo com isso e as coisas simplesmente deram certo.

A entrada que adicionei é:

Host github.com
    Hostname github.com
    Port 22
    User waterproofpatch
    IdentityFile ~/.ssh/id_rsa_waterproofpatch

Eu havia criado uma nova chave, exclusiva para minha conta, como id_rsa_waterproofpatch. Esta entrada em minha configuração de ssh especifica que, para conexões com github.com, desejo apresentar esta chave.

Outra solução provavelmente seria fazer o login na outra conta e excluir a chave ssh duplicada.

remendo impermeável
fonte
2

Eu tive um problema semelhante e descobri que o problema era o fato de que o arquivo de chave pública continha meu endereço de e-mail na última linha. Isso pareceu substituir a configuração do usuário em minha configuração. Assim que removi meu e-mail do arquivo .pub (e reenviei para o meu repo), o Git se conectou usando o usuário correto.

Mike
fonte
Isso funcionou para mim. Não sei por que o identificador no arquivo de chave pública estava originalmente no formato 'nome @ domínio', mas estava.
Brian Wagner
1

O que funcionou para mim foi usar a URL https do repositório Github em vez da URL ssh . Eu fui para a página do projeto Github e copiei o URL https em minha área de transferência e, em seguida, colei no segundo comando abaixo:

git remote rm origin
git remote add origin https://[...]
Keith Bennett
fonte
1

Que dor de cabeça!

problema:

  1. criar um repo no hub git
  2. clonar para máquina local
  3. não pode empurrar 403.

se transforma por uma razão desconhecida, git push estava usando o usuário errado. Eu tenho alguns IDs de usuário de hub git diferentes. Eu trabalho para 2 empresas diferentes e também tenho uma carteira de estudante

Estou trabalhando em um mac. aqui está o que eu finalmente fiz

1) remova o credential.helper

  • de alguma forma o auxiliar de credencial foi definido como osxkeychain
  • quando comecei o keychain, clique em login, senhas e procurei por github encontrei 3 entradas. Não tenho ideia de como o chaveiro poderia saber qual usar

uma. você precisa descobrir onde o credential.helper está configurado

git config --local credential.helper
git config --global credential.helper
git config --system credential.helper

b. depois de encontrar o arquivo fig correto, remova-o da seguinte maneira

git config --global --unset credential.helper

Agora, em meu repositório local, eu hackeei o arquivo .git / config

eu mudei

    url = https://github.com/aedavids/lab3RotationProject.git

para

    url = https://[email protected]/aedavids/lab3RotationProject.git
AEDWIP
fonte
1

No meu caso específico, o problema era que eu estava usando um .netrcpara acessar github.come ele estava configurado com um token de um usuário diferente:

machine github.com login <another-user-token>
Travis Clarke
fonte
0

limpar o chaveiro não ajudou ... Eu tive que ssh-add -Dadicionar a chave novamente comssh-add <keyfile>

Victor Pudeyev
fonte
0

Resolvi esse problema removendo (ou renomeando para * .bak) os arquivos id_rsa e id_rsa.pub no MacOS High Sierra. Ideia daqui .

Eu tenho redirecionamentos de host personalizados em ~ / .ssh / config que devem ser aplicados, mas usei o usuário errado antes de renomear os dois arquivos ...

CodingYourLife
fonte
0

Isso é o que funcionou para mim:

  1. Alterar as credenciais dentro de .git-credentials
  2. Alterar o user.name global e user.email dentro de .gitconfig
reshetech
fonte
0

O que funcionou para mim remover o repo e adicioná-lo novamente:

git remote rm origin
git remote add origin [email protected]:fguillen/MyApp.git
Fguillen
fonte
0

Eu tenho o mesmo problema no windows10, mesmo depois de desinstalar meu git, como @ user542833 diz que é porque o cache do windows e você deve remover as credenciais do Github em suas janelas Credential Managere quando você tenta empurrar novamente, o windows pede sua credencial e define novamente

ghazaleh javaheri
fonte
isso funcionou às vezes para mim, mas também às vezes não.
bvdb
0

Acabei de passar 6 horas descobrindo isso ao tentar enviar para um novo repositório de páginas do GitHub em uma nova conta.

Mesmo depois de definir a configuração user.name e user.email, o padrão seria minha conta principal.

Isso ocorre porque a chave ssh será padronizada como id_rsa (minha conta principal).

Para usar a nova conta, tive que executar:

ssh-add ~/.ssh/my_new_key

que fará com que o git use a nova chave ao pressionar.

Jmoz
fonte