如何使用其他用户名推送到GitHub?


156

一个朋友和我自己正在共享我的计算机。我已经在Windows 7上使用git bash shell推送到GitHub。现在我们在该计算机上的另一个项目中,我需要她推送到她的帐户。但是它一直尝试使用我的用户名并说我无权访问她的存储库:

$ 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

这是否对您有帮助?github.com/articles/setting-your-email-in-git(使用git config --global user.name her_username)在推送之前
Prinzhorn,

我看到您切换到了HTTPS网址,因此github总是提示您输入凭据。只需记住,无论用户实际执行推送,提交仍将被记录为由用户在git config user.name和git config user.email中完成。ps我不认为有谁推动历史的历史。
Jorge Orpinel 2014年

29
git config --local credential.helper ""可能会成功。
SOFe

我无法在Windows系统上遵循此处给出的任何解决方案。此答案中给出的步骤终于成功了stackoverflow.com/a/15382950/351903
Sandeepan Nath

@SOFe就是我想要的!此命令是否有效擦除了某些缓存的凭据?
CCJ

Answers:


93

如果您使用其他Windows用户,则您的SSH密钥和git设置将是独立的。

如果这不是您的选择,那么您的朋友应该将您的SSH密钥添加到她的Github帐户中。

虽然,以前的解决方案可以让您如愿以偿,但可以让您进行她的回购。如果您不希望这样做,并且可以在同一台PC上的其他文件夹中工作,则可以通过删除-gconfig命令的标志,在git文件夹内本地设置用户名和电子邮件:

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

另外,如果您推送https协议,Github每次都会提示输入用户名/密码(除非您使用密码管理器)。


6
据我所记得,SSH密钥在Github上必须是唯一的,您不能将相同的密钥附加到多个帐户
Gareth

@Gareth也许可以,但是您可以在Windows(以及我所知道的所有地方)中为同一用户设置多个SSH密钥。
西蒙·布德里亚斯

不能有两个键,请参阅下面的答案。
chovy

1
对于每个项目:git config --global user.name "Mona Lisa"
w3spi

235

这对我有用,它将提示输入用户名和密码

git config --local credential.helper ""
git push origin master

1
谢谢,它为我工作,我使用了bitbucket,并配置了我的用户名,但这解决了向AWS Code-commit的迁移
Alejandro Ruiz,

我已经helper = cache --timeout=999999设置好了.gitignore,这很有效。但是有什么方法可以重置它而不更改本地配置吗?
西罗Santilli郝海东冠状病六四事件法轮功

这真太了不起了!
hargun3045

这就是我想要的!
aagjalpankaj

1
在这里更好地解释它的作用:它配置您的本地存储库以忽略配置的(可能是全局)credential.helper,例如Windows凭据存储。这也意味着它每次都需要用户名/密码,因为未进行任何配置,因此也许您也可以配置credential.helper来代替缓存(请参阅@Ciro Santilli的答案)或在此处使用其他答案。
地毯

52

您可以使用其他帐户进行推送。例如,如果您的帐户是A,该帐户存储在.gitconfig中,而您想使用帐户B,该帐户B是您要推送的存储库的所有者。

帐户B:B_user_name,B_password
SSH链接的示例:https : //github.com/B_user_name/project.git

B帐户的推送是:

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

要查看.gitconfig中的帐户

  1. $git config --global --list
  2. $git config --global -e (也要更改帐户)

哇,这就是答案!我已经在本地配置中设置了user.nameuser.email已经使用用户名克隆了,但是没有用;现在,最后一个答案可以解决,而无需触摸Git 2.9.0 in Windows。“最后但并非最不重要” ..这就是所谓的。谢谢。这个答案值得更多的赞同。
WesternGun

3
唯一的副作用是,您的密码/用户名记录在bash历史记录中。。但是它对我有用。
WesternGun

谢谢你,这正是我想要做的。不过,这推动了大师的发展。我将如何推送到除master之外的分支?
史蒂文·安德森

2
@WesternGun如果不想阻止密码记录在bash历史记录中,请不要在网址中提供密码。使用https://'B_user_name'@github.com/B_user_name/project.git。这应该提示输入密码B_user_name
subtleseeker

24

我使用自定义设置ssh别名IdentityFile,并将源重写为使用我的自定义me-github主机名。

#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
:而不是删除再加入,我们可以通过改变远程URL git remote set-url origin git@user1-github:user1/my-repo.git 😊
宁范

18

如果您使用SSH URL(git@github.com:username/projectname.git)而不是HTTPS URL,则可以使用$GIT_SSH_COMMAND环境变量临时指定其他SSH密钥:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

据我所知,对于SSH URL,GitHub并不关心用户名,只关心密钥:如果用户帐户有权访问存储库,并且该帐户具有SSH密钥(请参阅帐户中的SSH密钥页面)设置),那么如果您使用该SSH密钥推送到该存储库,则该推送将被视为来自该用户。


1
这并没有为我工作,有趣的是,改变user.nameuser.emailgit config将更改帐户,一个提交有关
凯文·赵

它为我工作。请稍加评论,以使答案更加清晰。“ different_private_key”是hostA上的一个文件,其中包含userB的私钥,我们要代表该文件要在作为userA的hostA上执行“ git push”。您必须在hostA上创建此文件(例如,作为〜/ .ssh / id_rsa_userB),然后将其中存在userB的hostB的文件〜/ .ssh / id_rsa的内容放在此处。甚至userB是否存在于hostA上也没有关系。
亚历山大·萨莫洛夫

15

如果在运行git pushGit之后要求输入密码user,但您想按as new_user,则可能要使用git config remote.origin.url

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

此时,使用^C退出,git push然后使用后面的as推动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:

您好,我尝试过使用此解决方案来推动Atlassian隐藏。我收到错误“找不到<URL> / info / refs:您是否在服务器上运行git update-server-info?” 我认为我无法在Stash上运行命令。您有一个解决方案吗?谢谢!
Zsolt Szilagyi 2015年

对于GitHub,这看起来像:git config remote.origin.url https://different_user@github.com/different_user/repo.git
NumesSanguis

13

克隆时很简单,请使用git URL和您的用户名,同时提交会询问您的新用户密码。

例如:

git clone https://username@github.com/username/reponame.git

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


4
这个答案至少应该有更多的赞誉。如果您不按照@Krishna Kavoor的说明进行操作,则始终会遇到问题,因为尽管在全局范围内您具有username1,在本地范围内您具有username2,但是git会尝试使用全局名称。
Markon

这是行不通的。我用它和它说:fatal: repo not found
WesternGun

1
始终有效由于我有来自3个不同客户的3个不同项目。它像奇迹一样起作用。请检查您的回购路径是否正确。
Krishnamoorthy Acharya

7

如果这是你的问题

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

除了使用git config从终端更改用户名和电子邮件:

$ git config --global user.name "Bob"
$ git config --global user.email "bob@example.com"

您需要从钥匙串中删除授权信息。这个解决方案花了我几个小时才弄清楚,发现我的钥匙串中也有证书。

打开“钥匙串”访问权限,单击“所有项目”并搜索git。删除所有钥匙串


Windows 7与钥匙串对应的是什么?
Thomas Eyde

不确定,但会找出
答案

我想我也被困在这里。你知道了吗
Sandeepan Nath

不,最终没有找到
答案

1
感谢您提供有关从钥匙串中删除授权信息的建议
Luja Shrestha

7

我一直在使用一台机器将代码推送到具有不同用户名的两个不同的GitHub帐户。假设您已经设置了一个帐户并想要添加一个新帐户:

  1. 生成新的SSH密钥 ssh-keygen -t rsa -C "myaddress@example.com"
  2. 保存它,但切记不要覆盖现有的一个 id_rsa。给它起一个不同的名字,例如id_rsa_another
  3. 将密钥内容复制到您的GitHub帐户:

设置-> SSH和GPG密钥->新的SSH密钥-> 提供标签并粘贴密钥 ->添加SSH密钥

  1. 将密钥添加到ssh代理: ssh-add ~/.ssh/id_rsa_another
  2. 设置GitHub主机:touch ~/.ssh/config通过为您的帐户提供配置,使用创建一个配置文件并编辑该文件:
#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

现在,您应该能够根据添加到ssh代理的密钥从不同的帐户进行推送,即使用第一个帐户, ssh-add ~/.ssh/id_rsa

您可能还想更改用户电子邮件:

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

或在将代码插入其中一个帐户时清除SSH密钥,以防权限错误:

ssh-add -D


1
是的,我已经设置为多个帐户。但是我该如何使用第一帐户进行推送。你能分享命令吗?
codemicky

“我怎么推”是什么意思?难道git push不行?添加密钥后,您应该可以进行推送
Tomasz Bartkowiak

您应该为每个回购项目设置用户$ git config user.email
jasmintmp

6

转到凭据管理器转到Windows凭据删除“通用凭据”下的条目尝试重新连接。


谢谢。路径是Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials
Saheed

4

如前所述,您可以使用

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

手动设置单个回购的用户名和电子邮件,但是您必须添加以下命令:

git commit --amend --reset-author

如果您已经尝试在更改之前进行推送。否则,更改不会出现在配置文件中。


这不是真的。在--reset-author(与--...)将会把最新配置的名称/电子邮件上的最后一次提交的,也是最新的时间戳。它不会影响配置文件中的更改。
拉蒙·斯尼尔

3

您可以使用来为其他用户名添加新的远程URL git remote add origin-username https://username@github.expedia.biz/repository_name.git

之后,如果您按下git push -u origin-username master,则将提示您输入密码。


2

git config user.name仅更改我提交的名称。我仍然不能推动。这就是我解决的方法,我认为这对我来说很简单。

  1. 在要推送到您将使用https://help.github.com/articles/connecting-to-github-with-ssh/的计算机上的用户名下生成SSH密钥

  2. 将此密钥添加到要推送到https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/的github用户帐户中

  3. 选择使用SSH克隆

您可以立即以该用户的身份推送到该存储库。


2

如果在Windows和Windows下的用户Git以及manager用于管理凭据(又名Git-Credential-Manager-for-Windows Link),则问题在于,当https使用OAuth令牌推送到GitHub时,没有简单的方法可以在用户之间切换。

原因是令牌存储为:

  • 网址: git:https://github.com
  • 用户名: Personal Access Token
  • 密码: OAuth_Token

URL的变体Internet Address不起作用,例如:

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

解决方案:名称空间。可在以下配置的详细信息中找到Git-Credential-Manager-for-Windows

引用它:

命名空间

设置存储凭据的名称空间。

默认情况下,GCM将'git'命名空间用于所有存储的凭据,设置此配置值可控制全局或每个主机使用的命名空间。

git config --global credential.namespace name

现在,将您的凭据存储在Windows凭据管理器中为:

  • 网址: git.username:https://github.com
  • 用户名: Personal Access Token
  • 密码: OAuth_Token

请注意,我们已更改:git-> git.username(您在哪里更改username为实际用户名,或出于此目的,为可能需要的唯一标识符)

现在,在要使用特定条目的存储库中,执行:

git config credential.namespace git.username

(再次...替换 username为您想要的值)

.git/config现在将包含:

[credential]
    namespace = git.username

等等!正确的凭据将从Windows凭据存储中提取。

当然,这不会更改正在推送的用户/电子邮件。对于您必须配置通常user.nameuser.email


谢谢。这对我来说效果最好(Windows 10)。Windows凭据中没有其他git用户帐户的临时删除,也没有“黑客”。我所有存储库都有一个全局/主机git用户。除了其中之一需要不同的凭据。如果这也适合您的环境,则只需保留Windows凭据中的所有内容,转到“特殊”存储库并按git config credential.namespace git.username提及的方式键入(替换用户名)。如果您下次推送,git会要求您提供用户名的新凭据。
ford04

2

我无法弄清楚如何在一台机器上拥有第二个github身份(这些答案都不适用于我),但是我确实想出了如何以自己的身份推送到多个不同的github帐户的方法。

以相同的用户名推送,但推送到不同的github帐户

  1. 为您的第二个github帐户设置第二个SSH密钥(像这样

  2. 因此,在帐户之间进行更改:

用我的第二个github帐户推送

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

用我的主要帐户推送

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


0

提交发生的用户标识存储在配置文件中。

转到存储库的顶部vi .git / config

更改“ [remote” origin“]之后列出的网址行以使用适当的用户ID


0

如果您使用ssh并获得

对some_username / repository.git的权限被拒绝给 Alice_username

当您不想以Alice_username的身份进行推送时,请确保Alice_username没有将计算机的ssh密钥添加到其github帐户中。

我从爱丽丝的github帐户中删除了ssh密钥,并且推送成功了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.