222

一个朋友和我正在共享我的电脑。我已经在 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
4

25 回答 25

327

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

git config --local credential.helper ""
git push origin master
于 2018-02-25T05:37:36.710 回答
121

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

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

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

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

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

于 2012-10-27T18:51:30.073 回答
101

您可以使用不同的帐户推送。例如,如果您的帐户是A,它存储在 .gitconfig 中,并且您想使用帐户B,它是您要推送的 repo 的所有者。

Account 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 (也可以更改帐户)
于 2017-09-21T06:48:39.280 回答
29

我使用自定义设置了一个 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
于 2014-10-20T06:00:25.460 回答
25

请按照以下步骤操作:

  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
  1. 检查您的提交被标记给谁?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

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

此外,在进行第 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
于 2020-07-28T00:41:23.463 回答
22

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

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

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

于 2016-02-12T18:44:12.783 回答
16

如果在运行git pushGit 后要求输入密码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:
于 2013-11-12T05:21:26.517 回答
15

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

例如:

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

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

于 2017-09-04T11:39:54.830 回答
10

如果这是你的问题

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。删除所有钥匙串

于 2017-09-13T13:57:29.040 回答
9

如前所述,您可以使用

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

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

git commit --amend --reset-author

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

于 2017-02-17T22:21:23.570 回答
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

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

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

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

或在将代码输入其中一个帐户时清除 ssh 密钥以防出现权限错误:

ssh-add -D

于 2019-01-20T12:00:08.180 回答
6

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

于 2017-04-27T10:34:15.430 回答
6

我不知道如何在一台机器上拥有第二个 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
于 2020-05-20T05:05:34.890 回答
5
git add .
git commit -m "initial commit"
git config --local credential.helper ""
git push https://github.com/youraccount/repo.git --all

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

于 2021-01-03T08:42:07.843 回答
5

您可以使用为另一个用户名添加新的远程 URLgit remote add origin-username https://username@github.expedia.biz/repository_name.git

在此之后,如果您使用 推送git push -u origin-username master,这将提示您输入密码。

于 2018-10-15T12:14:46.260 回答
4

我最喜欢这样做。

git push https://username@github.com/username/repo

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

于 2021-08-19T16:28:17.867 回答
2

git config user.name 只更改我提交的名称。我还是推不动。这就是我解决它的方法,我认为这对我来说是一种简单的方法。

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

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

  3. 选择使用 SSH 克隆

您现在可以作为该用户推送到该存储库。

于 2017-08-31T18:13:30.753 回答
2

如果在 Windows 和用户 Git for Windows 和manager管理凭据(又名Git-Credential-Manager-for-Windows Linkhttps )下,问题是在使用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 Credential Store 中提取正确的凭据。

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

于 2018-01-07T10:54:40.993 回答
1

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

更好的是,对于 GitLab,我使用第二个“ origin,比如“ origin2”:

git remote add origin2 ...
然后

git push origin2 master

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

于 2020-10-06T12:45:26.713 回答
1

如果您有https://desktop.github.com/
,则可以转到首选项(或选项) -> 帐户
,然后注销并登录。

于 2017-08-18T23:42:31.113 回答
1

修改config位于.git项目根文件夹中的目录中的文件名:[PROJECT_PATH]/.git/config

我在这个文件的末尾添加了以下部分。之后,我可以用我的新名字推送到遥控器。

[user]
    name = Your Name
    email = MyEmailAddress@company.com
于 2021-08-22T17:52:01.430 回答
0

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

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

于 2021-03-27T22:08:28.140 回答
0

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

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

将 "[remote "origin"] 之后列出的 url 行更改为具有适当的用户 ID

于 2019-01-23T16:08:42.023 回答
0

我刚刚在以下位置添加了其他用户:

  • 回购设置,
  • 管理访问,
  • 邀请合作者

它对我有用。

于 2021-02-18T12:14:30.507 回答
0

如果您使用 ssh 并获取

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

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

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

于 2020-04-28T14:29:33.750 回答