Como envio para o GitHub com um nome de usuário diferente?

154

Eu e um amigo estamos compartilhando meu computador. Fiz push para o GitHub usando o shell git bash no Windows 7. Agora, estamos em um projeto diferente no computador e preciso que ela envie para a conta dela. Mas continua tentando usar meu nome de usuário e dizendo que não tenho acesso ao repositório dela:

$ git push her_github_repository our_branch
ERROR: Permission to her_username/repository.git denied to my_username.
fatal: The remote end hung up unexpectedly
às.
fonte
Isso ajuda help.github.com/articles/setting-your-email-in-git (use git config --global user.name her_username) antes de empurrar
Prinzhorn
Vejo que você mudou para URLs HTTPS, portanto o github sempre solicita credenciais. Lembre-se de que as confirmações ainda serão gravadas como feitas pelo usuário no git config user.name e no git config user.email, independentemente de quem realmente faz o push. ps Acho que não há uma história de quem empurrou o quê.
Jorge Orpinel 15/09/14
28
git config --local credential.helper ""pode fazer o truque.
SOFe
Não consegui seguir nenhuma das soluções dadas aqui no meu sistema Windows. Os passos indicados nesta resposta trabalhou finalmente stackoverflow.com/a/15382950/351903
Sandeepan Nath
@SOFe é o que eu estava procurando! Este comando efetivamente limpa algumas credenciais em cache?
CCJ

Respostas:

92

Se você usar diferentes usuários do Windows, suas configurações de chave SSH e git serão independentes.

Se essa não é uma opção para você, seu amigo deve adicionar sua chave SSH à conta do Github dela.

Embora, a solução anterior o mantenha pressionando como você, mas permitirá que você pressione o repo dela. Se você não quiser isso e trabalhar em uma pasta diferente no mesmo PC, poderá configurar o nome de usuário e o email localmente dentro de uma pasta com git, removendo a -gflag do comando config:

git config user.name her_username
git config user.email her_email

Como alternativa, se você empurrar o httpsprotocolo, o Github solicitará o nome de usuário / senha todas as vezes (a menos que você use um gerenciador de senhas).

Simon Boudrias
fonte
6
Tanto quanto me lembro, chaves SSH tem que ser único no Github, você não pode ter a mesma chave ligado a várias contas
Gareth
@ Gareth Talvez, mas você pode definir várias chaves SSH para o mesmo usuário no Windows (e em todos os lugares que eu conheço).
Simon Boudrias 27/10/12
não pode ter duas chaves, veja minha resposta abaixo.
chovy
1
Para todos os projetos:git config --global user.name "Mona Lisa"
w3spi 30/03
235

Isso funcionou para mim, ele solicitará o nome de usuário e a senha

git config --local credential.helper ""
git push origin master
caçador
fonte
1
Obrigado, ele trabalhou para mim eu usei bitbucket e eu iria configurar meu nome de usuário, mas isso resolvido a migração para o AWS código-commit
Alejandro Ruiz
Eu tinha helper = cache --timeout=999999colocado no meu .gitignoree isso funcionou. Mas alguma maneira de redefinir isso sem alterar uma configuração local, eu me pergunto?
Ciro Santilli respondeu
Isso é incrível!
hargun3045 27/03
Era isso que eu estava procurando !!!
aagjalpankaj 29/06
1
Explique melhor o que faz aqui: ele configura seu credential.helperrepositório local para ignorar o (provavelmente globalmente) configurado , por exemplo, o armazenamento de credenciais do Windows. Isso também significa que ele solicita um nome de usuário / senha sempre que necessário, pois nada está configurado. Portanto, talvez você também possa configurar o credential.helpercache (consulte a resposta de @Ciro Santilli) ou usar uma resposta diferente aqui.
rugk 19/07
50

Você pode enviar usando uma conta diferente. Por exemplo, se sua conta é A, armazenada em .gitconfig, e você deseja usar a conta B, que é a proprietária do repositório que deseja enviar por push.

Conta B : B_user_name, B_password
Exemplo de link SSH: https://github.com/B_user_name/project.git

O push com a conta B é:

$ git push https://'B_user_name':'B_password'@github.com/B_user_name/project.git

Para ver a conta em .gitconfig

  1. $git config --global --list
  2. $git config --global -e (para mudar de conta também)
thotruong
fonte
Uau, esta é a resposta !! Eu configurei user.name, user.emailna configuração local, clonei com nome de usuário e não funcionei; agora a última resposta funciona sem tocar chaveiro / whatever ... in Git 2.9.0 in Windows. "finalmente, mas não menos importante" .. é assim que se chama. Obrigado. Essa resposta merece mais votos.
WesternGun 04/04
3
O único efeito colateral é que sua senha / nome de usuário é gravada no histórico do bash. Mas funciona para mim.
WesternGun 4/12
Obrigado por isso, é exatamente isso que eu queria fazer. Isso empurra para dominar, no entanto. Como eu iria para um ramo além do mestre?
Steven Anderson
1
@WesternGun Não forneça a senha no URL se quiser impedir que ele seja gravado no histórico do bash. Use https://'B_user_name'@github.com/B_user_name/project.git. Isso deve solicitar a senha de B_user_name.
subtleseeker 8/07
24

Eu configurei um alias ssh usando um personalizado IdentityFilee reescrevi a origem para usar meu me-githubnome de host personalizado .

#when prompted enter `id_rsa_user1` as filename
ssh-keygen -t rsa

# ~/.ssh/config
Host user1-github
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa_user1

#check original remote origin url
git remote -v
origin [email protected]:user1/my-repo.git

#change it to use your custom `user1-github` hostname
git remote rm origin
git remote add origin git@user1-github:user1/my-repo.git
chovy
fonte
5
Em vez de remover, em seguida, adicionar, podemos mudar a url remoto por: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham
18

Se você usar um URL SSH ( [email protected]:username/projectname.git) em vez de um URL HTTPS, poderá especificar temporariamente uma chave SSH diferente usando a $GIT_SSH_COMMANDvariável de ambiente:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Pelo que sei, com URLs SSH, o GitHub não se importa com nomes de usuários, apenas com chaves: se uma conta de usuário tiver acesso a um repositório e essa conta tiver uma chave SSH (consulte a página de chaves SSH na conta configurações), se você usar essa chave SSH para enviar para esse repositório, o envio será tratado como proveniente desse usuário.

David Moles
fonte
1
isso não funcionou para mim, curiosamente, a alteração do user.namee user.emailem git configmudará a conta que uma consolidação está relacionada com
Kevin Zhao
Funcionou para mim. Apenas um pequeno comentário para tornar a resposta mais clara. "different_private_key" é um arquivo no hostA que contém a chave privada do usuárioB em nome da qual queremos executar "git push" no hostA que é o usuárioA. Você deve criar esse arquivo no hostA (por exemplo, como ~ / .ssh / id_rsa_userB) e colocar o conteúdo do arquivo ~ / .ssh / id_rsa a partir do hostB onde o userB existe. Não importa se o usuárioB existe ou não no hostA.
Alexander Samoylov
15

Se, depois de executar o git pushGit, solicitar uma senha de user, mas você desejar enviar como new_user, você pode usar git config remote.origin.url:

$ git push
[email protected]:either/branch/or/path's password:

Neste ponto, use ^Cpara sair git pushe use a seguir para pressionar como new_user.

$ git config remote.origin.url
[email protected]:either/branch/or/path

$ git config remote.origin.url [email protected]:either/branch/or/path

$ git push
[email protected]:either/branch/or/path's password:
Lukasz Czerwinski
fonte
Olá, eu tentei esta solução para empurrar para esconderijo atlassian. Recebo o erro "<URL> / info / refs não encontrado: você executou o git update-server-info no servidor?" Acho que não consigo executar comandos no Stash. Você tem uma idéia de como resolver isso? Obrigado!
Zsolt Szilagyi
Para o GitHub, seria assim:git config remote.origin.url https://[email protected]/different_user/repo.git
NumesSanguis
13

É simples enquanto clonar, leve o URL do git com seu nome de usuário. Ao confirmar, ele solicitará sua nova senha de usuário.

Por exemplo:

git clone https: //[email protected]/username/reponame.git

git clone https: //[email protected]/username/reponame.git

Krishnamoorthy Acharya
fonte
4
Esta resposta deve ter mais votos positivos, pelo menos. Se você não fizer como @Krishna Kavoor diz, sempre terá o problema, porque, embora globalmente você tenha nome de usuário1 e localmente tenha nome de usuário2, o git tentará usar o nome global.
Mark3 #
Não funciona. Eu usei ele e ele diz: fatal: repo not found.
WesternGun 4/12
1
Ele funciona sempre Desde que eu tenho 3 projetos diferentes de 3 clientes diferentes. Funciona como um milagre. Verifique se o caminho do seu repo está correto.
Krishnamoorthy Acharya
7

se esse é o seu problema

remote: Permission to username1/repo.git denied to username2.
fatal: unable to access 'https://github.com/username1/repo.git/':
The requested URL returned error: 403

Além de alterar o nome de usuário e o email do terminal usando o git config:

$ git config --global user.name "Bob"
$ git config --global user.email "[email protected]"

você precisará remover as informações de autorização do Keychain. Esta solução levou várias horas para descobrir. Descobri que também tinha certificado no meu chaveiro.

Abra o acesso ao chaveiro, clique em Todos os itens e procure por git. Excluir todas as chaves

Muyide Ibukun
fonte
O que é o equivalente do Windows 7 ao Keychain?
Thomas Eyde
Não tenho certeza, mas vai descobrir
Muyide Ibukun
Acho que também estou preso aqui. Você descobriu?
Sandeepan Nath
Não, não descobri, mas acho que não deve ser tão difícil #
Muyide Ibukun
1
obrigado pela sugestão sobre a remoção de informações de autorização de Keychain
Luja Shrestha
7

Eu tenho usado uma máquina para enviar código para duas contas diferentes do GitHub com nome de usuário diferente. Supondo que você já configurou uma conta e deseja adicionar uma nova:

  1. Gere nova chave SSH ssh-keygen -t rsa -C "[email protected]"
  2. Salve, mas lembre-se de não substituir o existente id_rsa. Dê um nome diferente, por exemploid_rsa_another
  3. Copie o conteúdo da chave para sua conta do GitHub:

Configurações -> Chaves SSH e GPG -> Nova chave SSH -> Dê um rótulo e cole a chave -> Adicionar chave SSH

  1. Adicione a chave ao agente ssh: ssh-add ~/.ssh/id_rsa_another
  2. Configurar um host do GitHub: Crie um arquivo de configuração touch ~/.ssh/confige edite o arquivo fornecendo configurações para suas contas:
#first account
Host github.com-first
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

#another account
Host github.com-another
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_another

Agora você deve poder enviar contas diferentes, dependendo da chave que você adicionar ao agente ssh, ou seja, usar sua primeira conta ssh-add ~/.ssh/id_rsa.

Você também pode alterar seu email de usuário:

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

ou limpe as chaves ssh em caso de erro de permissão ao inserir código em uma das contas:

ssh-add -D

Tomasz Bartkowiak
fonte
1
Sim, eu já defini como várias contas. Mas como posso empurrar com a primeira conta. Você pode compartilhar o comando?
codemicky 29/01
O que você quer dizer com "como posso empurrar"? Não git pushfunciona? Você deve poder pressionar depois de adicionar sua chave
Tomasz Bartkowiak
Você deve definir o usuário para cada projeto de repositório $ git config user.email
jasmintmp
6

Vá para o Credential Manager Vá para Windows Credentials Exclua as entradas em Generic Credentials Tente conectar-se novamente.

Deepak
fonte
Obrigado. O caminho é Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed
4

Como mencionado anteriormente, você pode usar

git config user.name her_username
git config user.email her_email

para definir manualmente o nome de usuário e o email para um repositório único, mas você deve adicionar este comando:

git commit --amend --reset-author

se você já tentou empurrar antes da alteração. Caso contrário, as alterações não aparecerão no arquivo de configuração.

Martin819
fonte
Isso não é verdade. O --reset-author(com --...) colocará o último nome / email configurado na última confirmação e também o último carimbo de data / hora. Não afeta as alterações no arquivo de configuração.
Ramon Snir
3

Você pode adicionar um novo URL remoto para o outro nome de usuário usando git remote add origin-username https://[email protected]/repository_name.git

Depois disso, se você pressionar usando git push -u origin-username master, isso solicitará a senha.

Raman Singh
fonte
2

O git config user.name altera apenas o nome que eu confirmo. Eu ainda não posso empurrar. Foi assim que resolvi e acho que é uma maneira fácil para mim.

  1. Gere uma chave SSH com o nome de usuário que você deseja enviar no computador e usará https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Adicione essa chave à conta de usuário do github que você deseja enviar para https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Escolha Clonar com SSH

Você pode enviar como usuário esse repositório agora.

Yang Fang
fonte
2

Se no Windows e no usuário Git for Windows e no managerpara gerenciar as credenciais (também conhecido como Git-Credential-Manager-for-Windows Link ), o problema é que não há uma maneira fácil de alternar entre os usuários ao passar para o GitHub httpsusandoOAuth tokens.

O motivo é que o token é armazenado como:

  • Endereço de internet: git:https://github.com
  • Nome do usuário: Personal Access Token
  • Senha: OAuth_Token

Variações do URL em Internet Addressnão funcionam, por exemplo:

A solução: namespaces . Isso é encontrado nos detalhes para a configuração do Git-Credential-Manager-for-Windows:

Citando a partir dele:

namespace

Define o espaço para nome das credenciais armazenadas.

Por padrão, o GCM usa o espaço para nome 'git' para todas as credenciais armazenadas. A definição desse valor de configuração permite o controle do espaço para nome usado globalmente ou por host.

git config --global credential.namespace name

Agora, armazene sua credencial no Windows Credential Manager como:

  • Endereço de internet: git.username:https://github.com
  • Nome do usuário: Personal Access Token
  • Senha: OAuth_Token

Observe que nós mudamos: git-> git.username(onde você alterausername para o seu nome de usuário real ou para o efeito, para o que quiser como identificador exclusivo)

Agora, dentro do repositório em que você deseja usar a entrada específica, execute:

git config credential.namespace git.username

(Novamente ... substitua usernamepelo valor desejado)

Sua .git/configvontade agora contêm:

[credential]
    namespace = git.username

Et voilá! A credencial correta será extraída do Windows Credential Store.

Isso, é claro, não muda qual usuário / email está enviando. Para isso você tem que configurar o habitual user.nameeuser.email

lembrança
fonte
Obrigado. Isso funcionou melhor para mim (Windows 10). Nenhuma exclusão temporária de outras contas de usuário git nas credenciais do Windows, nem "hacks". Eu tenho um usuário global / host git para todos os repositórios. Exceto que apenas um deles requer credenciais diferentes. Se isso também se adequar ao seu ambiente, deixe tudo como está nas credenciais do Windows, vá para o repositório "especial" e digite git config credential.namespace git.usernamecomo mencionado (substituindo o nome de usuário). Se você pressionar da próxima vez, o git solicitará as novas credenciais para o nome de usuário.
ford04
2

Eu não conseguia descobrir como ter uma identidade do segundo github em uma máquina (nenhuma dessas respostas funcionou para mim), mas descobri como ser capaz de enviar para várias contas diferentes do github como eu.

Envie o mesmo nome de usuário, mas para diferentes contas do github

  1. Configure uma segunda chave SSH ( assim ) para sua segunda conta do github

  2. Alterne entre contas assim:

Empurre com minha nova conta do 2º github

ssh-add -D
ssh-add ~/.ssh/ssh_key_for_my_2nd_account
git push

Enviar com minha conta principal

ssh-add -D
ssh-add ~/.ssh/id_rsa   
git push
kris
fonte
1

Se você tiver https://desktop.github.com/
, poderá acessar Preferências (ou Opções) -> Contas
e sair e entrar .

Honesto Abe
fonte
Não há menu Preferências?
Thomas Eyde
@ThomasEyde Existe no macOS. É "Opções" no Windows.
Honest Abe
0

O ID do usuário em que a confirmação ocorre é armazenado no arquivo de configuração.

vá para o topo do repositório vi .git / config

altere a linha de URL listada após "origem" [remota ""] para ter o ID do usuário apropriado

wainCam
fonte
0

Se você usa ssh e obtém

Permissão para some_username / repository.git negada para Alice_username

enquanto você não deseja enviar como Alice_username, verifique se Alice_username não possui a chave ssh do seu computador adicionada à conta do github.

Eu apaguei minha chave ssh da conta do github de alice e o push funcionou.

Achraf Amil
fonte