使用配置文件配置多个 git 帐户仅识别第一个 GitHub 帐户并忽略第二个

configure multiple git accounts with config file only recognises first GitHub account and ignores second

我正在尝试在我的计算机上设置多个 Github.com 帐户。我关注了 this tutorial and also this one here。但是,我遇到了问题。我正在 windows.

上开发 Unbuntu Linux 子系统

我的ssh配置文件如下:

# personal git hub
Host github.com
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_ecdsa_gh

# work git hub
Host github-work
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_ecdsa

问题是,如果我将个人(主要)github 帐户的主机指定为 github.com,并且我推送与该帐户关联的回购协议,那么该帐户的一切正常.但是,工作帐户不再有效,我在终端中收到一条消息说 Please make sure you have the correct access rights and the repository exists.

如果我随后更改我的 config 文件并将个人帐户的主机指定为 personal 之类的东西,那么它将不再有效,但我的工作帐户将开始正常工作。如果我同时更改两者,那么 Host 都不被称为 github.com 那么我的工作帐户可以推送,但我的个人帐户无法识别。如果我将两者都设置为 github.com,那么我的个人帐户会再次使用,而我的工作帐户不会。

除了上述更改主机名的测试外,我还尝试删除和更新密钥,但均无效。我还尝试使用 ssh -T myname-gitssh -T work-git 测试 git 是否识别 ssh 密钥。在这样做的过程中,我收到消息告诉我 Hi [account name] successfully authenticated, but Github does not provide shell access。所以这些键都可以正常工作并且被 Github 识别。我真的不确定是什么原因造成的。我已经用 ssh-add 清除并重新添加了密钥,并且我检查了我正在使用的回购协议是否在本地与正确的帐户相关联,并且没有意外地与错误的帐户相关联的提交。此外,我检查了 windows 上的全局帐户和 Linux 子系统上的全局帐户是否都设置为我个人帐户的凭据。我也通过堆栈上的问答来查看类似的问题,但是 none 的建议方法为我解决了这个问题。

任何人都可以告诉我可能出了什么问题以及我该如何解决它吗?

感谢阅读。

SSH 配置文件的解析方式,应用与主机名匹配的第一个 line/block,不处理文件的其余部分。匹配在 Host 线上完成;你需要做 git clone git://git@github-work/user/repo.git(可能没有 git@)来指示它使用第二个配置。

我终于弄明白了,我发布了一个答案,以防有人像我一样被卡住。

如下配置ssh配置文件:

# personal git hub
Host github.com-personal
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_ecdsa_gh

# work git hub
Host github.com-work
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_ecdsa

然后导航到您正在处理的任何存储库,并通过执行 vim .git/config 打开文件(或您喜欢的任何文本编辑器)来修改 [remote "origin"]。然后修改它,使其对应于正确的 github 键。例如,为了使其与我的工作帐户相对应,我会将其编辑为如下内容:

[remote "origin"]
        url = git@github.com-work:work/myRepo.git

其中 github.com-work github.com-personal 对应于配置文件的 Host 部分中为相应密钥提供的名称。