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

时间:2012-10-27 18:44:42

标签: git github

朋友和我在一起分享我的电脑。我已经在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

23 个答案:

答案 0 :(得分:113)

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

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

答案 1 :(得分:64)

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

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

虽然,以前的解决方案会让你自己推动,但它会让你进入她的回购。如果你不想要这个并在同一台电脑上的不同文件夹中工作,你可以通过删除config命令的-g标志在git文件夹内本地设置用户名和电子邮件:

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

或者,如果你推翻https协议,Github每次都会提示输入用户名/密码(除非你使用密码管理器)。

答案 2 :(得分:20)

您可以使用其他帐户进行推送。 例如,如果您的帐户 A 存储在.gitconfig中,并且您想要使用帐户 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(也改变帐户)

答案 3 :(得分:18)

我使用自定义IdentityFile设置了ssh别名,并重写了原点以使用我的自定义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

答案 4 :(得分:13)

如果在运行git push Git后要求输入user密码,但您希望按new_user,则可能需要使用git config remote.origin.url

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

此时使用^C退出git push并使用以下内容推送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:

答案 5 :(得分:12)

如果您使用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密钥(请参阅{ {3}}在帐户设置中),如果您使用该SSH密钥推送到该存储库,推送将被视为来自该用户。

答案 6 :(得分:12)

请遵循以下步骤:

  1. 您必须了解这一点,在提交之前定义作者! the commits are already frozen: they have whatever name is set for their author and committer, and these cannot be changed.
# you can check what's currently:
git config user.name
git config user.email

git config user.name "your_github_username"
git config user.email "your_github_email"

# Again check what's currently:
git config user.name
git config user.email
  1. 检查提交标记给谁?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

万一作者错了,那么您可以轻松undo last commit without losing changes

此外,在进入步骤3之前,请不要忘记按照步骤1进行健全性检查!!

  1. 提示您输入github_username和github_password
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password

答案 7 :(得分:7)

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

例如:

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

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

答案 8 :(得分:6)

如果这是你的问题

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"

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

打开Keychain访问权限,单击All Items并搜索git。删除所有钥匙串

答案 9 :(得分:5)

转到Credential Manager 转到Windows凭据 删除Generic Credentials下的条目 尝试重新连接。

答案 10 :(得分:3)

如前所述,您可以使用

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

为单个仓库手动设置用户名和电子邮件,但您必须添加以下命令:

git commit --amend --reset-author

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

答案 11 :(得分:3)

git add .
git commit -m "initial commit"
git config --local credential.helper ""
git push https://github.com/youraccount/repo.git --all

执行此推送命令后,将打开用户名密码提示。

答案 12 :(得分:3)

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

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

  1. 为您的第二个github帐户设置第二个SSH密钥(like so

  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

答案 13 :(得分:1)

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

原因是令牌存储为:

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

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

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

当然,这并不会改变推送哪个用户/电子邮件。为此,您必须配置通常的user.nameuser.email

答案 14 :(得分:1)

我一直在使用一台机器将代码推送到具有不同用户名的两个不同的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

答案 15 :(得分:1)

您可以使用git remote add origin-username https://username@github.expedia.biz/repository_name.git

为其他用户名添加新的远程URL。

此后,如果您使用git push -u origin-username master进行推送,则会提示您输入密码。

答案 16 :(得分:1)

git config user.name只更改我提交的名称。我仍然无法推动。这就是我解决它的方式,我觉得这对我来说很简单。

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

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

  3. 选择使用SSH克隆

  4. 您现在可以将此用户推送到该回购。

答案 17 :(得分:1)

如果你有https://desktop.github.com/
然后你可以去Preferences (or Options) - >账户
然后退出并登录。

答案 18 :(得分:0)

进行提交的用户ID存储在配置文件中。

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

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

答案 19 :(得分:0)

如果您使用ssh并获得

拒绝some_username / repository.git的权限 Alice_username

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

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

答案 20 :(得分:0)

这应该工作: git push origin local-name:remote-name

更好,对于GitLab,我使用第二个“ origin,说“ origin2”:

git remote add origin2 ...
然后

git push origin2 master

常规的(简短的)git push应该像第一个“ origin”一样隐式工作

答案 21 :(得分:0)

我刚刚添加了其他用户:

  • 存储库设置,
  • 管理访问权限,
  • 邀请合作者

它对我有用。

答案 22 :(得分:0)

我遇到了类似的问题。我有一个用于工作的 github 帐户和一个私人帐户。在我的 Mac 上,我主要使用我的工作 github。我无法说服 git 通过终端推送到我的私人仓库。但是当我使用github桌面时它起作用了。

(我知道一定有不同的方法,但以上答案都没有帮助,所以这是阻力最小的方法。)