多个 Github 帐户 Git 在 Windows
Multiple Github Accounts With Git In Windows
我最近 运行 遇到了一个问题,我无法将更改推送到我在桌面上 git 中作为另一个用户克隆的第一个用户的存储库。
基本上是这样的,
- 第一次使用 git 时需要 github 凭据
推送到存储库。然后将这些凭据用于所有
无论 repo 是如何克隆的(哪个 ssh 密钥、用户、
等等)
- 为两个 github 帐户生成 SSH 密钥并将条目添加到
ssh 配置以这些身份文件为目标。键被添加到每个
git中心帐户也是如此。
- 使用原始 ssh 配置中相应的主机条目克隆 repo
帐户 git 克隆 :/.git
- 尝试将更改推送到存储库并成功克隆存储库使用
第二个帐户的 ssh 配置中相应的主机条目 git clone
<第二个主机>:<第二个用户名>/.git
尝试将更改推送到 repo 并收到原始错误
用户名没有权限,即使这是使用克隆的
第二个用户,更具体地说是一个 ssh 密钥。
清除 windows 凭据管理器中的 git 条目没有
解决这个问题。
清除全局用户名和电子邮件未解决此问题
我终于能够使用以下方法推送更改:
GIT_SSH_COMMAND="ssh -i <path to private ssh key for second user>" git push
我将此发布给遇到此问题的其他人,同时也想问几个问题,
我知道这个命令本质上是指定 ssh 连接在推送时要使用的密钥,但是如果使用相同的身份文件克隆它,为什么这个密钥还没有成为目标?
是否有任何替代方法或更好的方法,而不是像手动更改配置值或从 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 寻求帮助。
我最近 运行 遇到了一个问题,我无法将更改推送到我在桌面上 git 中作为另一个用户克隆的第一个用户的存储库。
基本上是这样的,
- 第一次使用 git 时需要 github 凭据 推送到存储库。然后将这些凭据用于所有 无论 repo 是如何克隆的(哪个 ssh 密钥、用户、 等等)
- 为两个 github 帐户生成 SSH 密钥并将条目添加到 ssh 配置以这些身份文件为目标。键被添加到每个 git中心帐户也是如此。
- 使用原始 ssh 配置中相应的主机条目克隆 repo 帐户 git 克隆 :/.git
- 尝试将更改推送到存储库并成功克隆存储库使用 第二个帐户的 ssh 配置中相应的主机条目 git clone <第二个主机>:<第二个用户名>/.git
尝试将更改推送到 repo 并收到原始错误 用户名没有权限,即使这是使用克隆的 第二个用户,更具体地说是一个 ssh 密钥。
清除 windows 凭据管理器中的 git 条目没有 解决这个问题。
清除全局用户名和电子邮件未解决此问题
我终于能够使用以下方法推送更改:
GIT_SSH_COMMAND="ssh -i <path to private ssh key for second user>" git push
我将此发布给遇到此问题的其他人,同时也想问几个问题,
我知道这个命令本质上是指定 ssh 连接在推送时要使用的密钥,但是如果使用相同的身份文件克隆它,为什么这个密钥还没有成为目标?
是否有任何替代方法或更好的方法,而不是像手动更改配置值或从 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 寻求帮助。