多个 Github 帐户 Git 在 Windows

Multiple Github Accounts With Git In Windows

我最近 运行 遇到了一个问题,我无法将更改推送到我在桌面上 git 中作为另一个用户克隆的第一个用户的存储库。

基本上是这样的,

我终于能够使用以下方法推送更改:

GIT_SSH_COMMAND="ssh -i <path to private ssh key for second user>" git push

我将此发布给遇到此问题的其他人,同时也想问几个问题,

  1. 我知道这个命令本质上是指定 ssh 连接在推送时要使用的密钥,但是如果使用相同的身份文件克隆它,为什么这个密钥还没有成为目标?

  2. 是否有任何替代方法或更好的方法,而不是像手动更改配置值或从 windows 凭据管理器中删除条目这样繁琐的工作?

因此,目标是将更改推送到多个 github 帐户,而无需执行临时指定要使用的 ssh 密钥等操作。


HTTP 路径

https://github.com/schwaggs/testssh

https://github.com/jjschweigert/testrepo

SSH 路径

git@github.com:schwaggs/testssh.git

git@github.com:jjschweigert/testrepo.git

SSH 配置文件

$ cat ~/.ssh/config
Host jjschweigert
 HostName github.com
 User git
 IdentityFile ~/.ssh/jjschweigert_key
Host schwaggs
 HostName github.com
 User git
 IdentityFile ~/.ssh/jjschweigert_key

使用原始帐户克隆

$ git clone jjschweigert:jjschweigert/testrepo.git
Cloning into 'testrepo'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 28 (delta 0), reused 28 (delta 0), pack-reused 0
Receiving objects: 100% (28/28), done.

推送到原始帐户 (jjschweigert)

$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 261 bytes | 43.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To jjschweigert:jjschweigert/testrepo.git
   c082e38..31b7830  master -> master

从第二个帐户 (schwaggs) 克隆

$ git clone schwaggs:schwaggs/testssh.git
Cloning into 'testssh'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 21 (delta 0), reused 18 (delta 0), pack-reused 0
Receiving objects: 100% (21/21), done.

推送到二级账户

$ git push
ERROR: Permission to schwaggs/testssh.git denied to jjschweigert.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

SSH -T 输出

$ ssh -T jjschweigert
Hi jjschweigert! You've successfully authenticated, but GitHub does not provide shell access.


$ ssh -T schwaggs
Hi jjschweigert! You've successfully authenticated, but GitHub does not provide shell access.

Clearing the git entries in the windows credential manager did not resolve this issue.

如果您使用的是 ssh URL (git@github.com:<user>/<repo>),凭证管理器 不涉及 :它为 https:// URL仅S.

Use git for the first time which asks for github credentials when pushing to a repository.

只有当远程源 URL 是 https 时才会出现这种情况。

So the goal would be to push changes to multiple github accounts without having to do things like temporarily specify the ssh key to use.

这是通过 ssh 配置文件完成的:参见实际示例:

  • "How to work on personal GitHub repo from office computer whose SSH key is already added to a work related GitHub account?"
  • "How to set up authentication for two separate GitHub accounts from same ssh client?"

来自编辑

Host user1
 HostName github.com
 User git
 IdentityFile ~/.ssh/iser1_key  <<====
Host user2
 HostName github.com
 User git
 IdentityFile ~/.ssh/user1_key  <<==== same key!? Meaning same user!

如果 user2 条目的 SSH 配置引用了 user1 私钥,则您不能期望以 user2 身份推送。

根据与 VonC 的对话,您可以在 ssh 配置文件中清楚地看到第二个用户的身份文件不正确,因为它指向第一个用户文件。第二个条目是从第一个条目复制而来的,这个值没有改变。

修改值以指向正确的键后,即 ~/.ssh/schwaggs_key 我可以毫无问题地克隆和推送。作为旁注,我必须在 git 中为从每个用户提取的每个存储库设置用户的电子邮件和名称属性,即一旦进入存储库,

git config user.email "github account email"

git config user.name "github account username"

您需要为您的第二个 Github 帐户创建一个新的 ssh 密钥,因为默认情况下 git 使用您第一个 Github 帐户的密钥,当您尝试从第二个帐户推送,您将获得远程权限:privateuser/privaterepo.git 的权限被工作用户拒绝。在这种情况下,workeruser 是您第一个 Github 帐户的用户名。因此,您不能使用第一个 Github 帐户的用户名推送到第二个 Github 帐户。按照此 link 寻求帮助。

https://www.youtube.com/watch?v=fnSRBRiQIU8