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

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).


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

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)

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 git@github.com: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

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 ( git@github.com: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.


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
user@my.host.com: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
user@my.host.com:either/branch/or/path

$ git config remote.origin.url new_user@my.host.com:either/branch/or/path

$ git push
new_user@my.host.com:either/branch/or/path's password:

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://different_user@github.com/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: //username@github.com/username/reponame.git

git clone https: //username@bitbucket.org/username/reponame.git


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

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


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

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

ssh-add -D


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.


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.


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://username@github.expedia.biz/repository_name.git

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


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.


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:

  • git:https://username@github.com
  • git:https://github.com/username
  • ...

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


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


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


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.

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.