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

at.*_*at. 117 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
Run Code Online (Sandbox Code Playgroud)

s-h*_*ter 162

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

git config --local credential.helper ""
git push origin master
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (4认同)
  • 这是正确的答案。忽略此其他所有答案。 (4认同)
  • Github 最近回应称:“远程:对密码身份验证的支持已于 2021 年 8 月 13 日删除。请改用个人访问令牌。” (3认同)
  • 在这里更好地解释一下它的作用:它将您的本地存储库配置为忽略(可能是全局的)配置的“credential.helper”,例如 Windows 凭证存储。这也意味着它*每次*需要用户名/密码,因为没有配置任何内容,所以也许您也可以配置“credential.helper”来缓存(请参阅@Ciro Santilli的答案)或使用不同的答案这里。 (2认同)

Sim*_*ias 79

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

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

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

git config user.name her_username
git config user.email her_email
Run Code Online (Sandbox Code Playgroud)

或者,如果您推送https协议,Github将每次都提示输入用户名/密码(除非您使用密码管理器).

  • 据我所知,SSH密钥必须在Github上是唯一的,你不能将相同的密钥附加到多个帐户 (6认同)
  • 这只是更改显示的用户名。它不会更改登录的用户名。正如其他答案中所述,一个好方法是更改​​远程 url: `git push https://your_other_username_at_github@github.com/username/provided path.git/` 其中 `@` 之后的所有内容都是默认的 https url回购协议的。 (4认同)

tho*_*ong 31

您可以使用不同的帐户进行推送.例如,如果您的帐户是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
Run Code Online (Sandbox Code Playgroud)

要在.gitconfig中查看帐户

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

  • @WesternGun 如果您想防止密码被记录在 bash 历史记录中,请不要在 url 中提供密码。使用“https://'B_user_name'@github.com/B_user_name/project.git”。这应该提示输入“B_user_name”的密码。 (11认同)
  • 这个答案不再有效:https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ (5认同)
  • 对密码身份验证的支持已于 2021 年 8 月 13 日删除。:( (5认同)
  • 唯一的副作用是,您的密码/用户名记录在bash历史记录中..但它适用于我. (3认同)

小智 20

请按照以下步骤操作:

  1. 你必须明白,你在提交之前定义了作者! 提交已经被冻结:他们为作者和提交者设置了任何名称,并且无法更改。
# 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
Run Code Online (Sandbox Code Playgroud)
  1. 检查您的提交标记给谁?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3
Run Code Online (Sandbox Code Playgroud)

如果作者错了,那么您可以轻松撤消上次提交而不会丢失更改

另外,在转到第 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
Run Code Online (Sandbox Code Playgroud)


cho*_*ovy 18

我使用自定义设置了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
Run Code Online (Sandbox Code Playgroud)

  • 除了删除然后添加外,我们可以通过以下方式更改远程URL:`git remote set-url origin git @ user1-github:user1 / my-repo.git` (2认同)

Luk*_*ski 13

如果在运行git pushGit后要求输入密码user,但是你想推送new_user,你可能想要使用git config remote.origin.url:

$ git push
user@my.host.com:either/branch/or/path's password:
Run Code Online (Sandbox Code Playgroud)

此时使用^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:
Run Code Online (Sandbox Code Playgroud)


Dav*_*les 13

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

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push
Run Code Online (Sandbox Code Playgroud)

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

  • 这对我有用。只是一个小评论以使答案更清楚。“ different_private_key”是主机A上的一个文件,其中包含用户B的私钥,我们希望代表该用户在主机A上执行“git推送”作为用户A。您必须在主机 A 上创建此文件(例如,作为 ~/.ssh/id_rsa_userB),并将 userB 所在的主机 B 中的文件 ~/.ssh/id_rsa 的内容放在那里。hostA 上是否存在 userB 甚至都不重要。 (2认同)

The*_*ool 12

我喜欢这样做最好。

git push https://username@github.com/username/repo
Run Code Online (Sandbox Code Playgroud)

这将提示输入密码,因此您不必在 shell 中以纯文本形式写入密码。


Kri*_*rya 10

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

例如:

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

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

  • 这个答案至少应该有更多的支持.如果你不这样做,@ Krishna Kavoor说,你将永远有这个问题,因为尽管全局你有username1,你在本地有username2,git会尝试使用全局名称. (4认同)

Tom*_*iak 9

我一直在使用一台机器将代码推送到两个不同用户名的不同 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

或者在将代码推送到其中一个帐户时出现权限错误时清除 ssh 密钥:

ssh-add -D


kri*_*ris 9

我不知道如何在一台机器上拥有第二个 github 身份(这些答案都不适合我),但我确实弄清楚了如何能够像我自己一样推送到多个不同的 github 帐户。

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

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

  2. 帐户之间的更改如下:

使用我新的第二个 github 帐户进行推送

ssh-add -D
ssh-add ~/.ssh/ssh_key_for_my_2nd_account
git push
Run Code Online (Sandbox Code Playgroud)

使用我的主帐户推送

ssh-add -D
ssh-add ~/.ssh/id_rsa   
git push
Run Code Online (Sandbox Code Playgroud)

  • 最后,一些有用的东西。谢谢你! (2认同)

Mar*_*819 8

如前所述,您可以使用

git config user.name her_username
git config user.email her_email
Run Code Online (Sandbox Code Playgroud)

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

git commit --amend --reset-author
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是真的。`--reset-author`(带有 `--`...)会将最新配置的名称/电子邮件放在最后一次提交上,以及最新的时间戳。它不会影响配置文件中的更改。 (2认同)

小智 6

转到凭据管理器转到Windows凭据删除通用凭据下的条目再次尝试连接.


Muy*_*kun 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
Run Code Online (Sandbox Code Playgroud)

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

$ git config --global user.name "Bob"
$ git config --global user.email "bob@example.com"
Run Code Online (Sandbox Code Playgroud)

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

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


Ram*_*ngh 5

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

此后,如果您按下 using git push -u origin-username master,系统将提示您输入密码。


Use*_*ser 5

git add .
git commit -m "initial commit"
git config --local credential.helper ""
git push https://github.com/youraccount/repo.git --all
Run Code Online (Sandbox Code Playgroud)

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