如何在同一设备上的两个git帐户之间切换,在终端(WSL2)?



我已经创建了两个独立的GitHub帐户。

我也为他们生成了两个独立的SSH密钥,使用相同的设备。

当我在终端输入git config user.name时,输出显示USERNAME2

我现在想在帐号1上工作,所以我输入了git config --global user.name "USERNAME1,并为电子邮件做了同样的操作。

但我认为它没有真正切换帐户,只是重命名我的用户名或什么?我认为这是因为当我试图在帐户中创建一个新的repo时,对于所有git命令,我一直得到fatal: not a git repository (or any of the parent directories): .git错误,这是我以前从未得到过的,当我有一个单独的帐户运行时。

我的SSH密钥在两个不同的文件夹中(对于account1,它在home dir的. SSH文件夹中,对于account2,它在home dir的.newssh文件夹中)。

我该怎么办?

我现在想在帐户1工作,所以我输入git config --global user.name "USERNAME1"

这与远程Git服务器身份验证无关。
它只设置本地提交作者。

要使用不同的帐户,您需要不同的远程URL,每个URL设置为使用适当的ssh私钥进行远程认证。

这是用~/.ssh/config完成的,如下所示。

Host github2
HostName github.com
User git
IdentityFile /home/me/.newssh/key2

它假设:

  • 你有git init myProjectFolder,为了工作在ProjectFolder

  • 您已经在Projectfolder

    中设置了正确的远程URL
    git remote add origin github2:<me>/myProject
    

一步一步,假设在WSL2中有一个活动的shell会话(一定要用对您更有意义的名称更改名称)

  1. 生成SSH密钥,每个帐户一个
cd ~/.ssh
ssh-keygen -t rsa -P "" -f account1
ssh-keygen -t rsa -P "" -f account2
  1. 注册account1。酒吧和账户。请参见"为您的GitHub帐户添加新的SSH密钥">

  2. 设置~/.ssh/config:

Host account1
HostName github.com
User git
IdentityFile ~/.ssh/account1
Host account2
HostName github.com
User git
IdentityFile ~/.ssh/account2
  1. 使用正确的URL(以及正确的帐户)克隆您的存储库
cd
git clone account1:<NameAccount1>/<Repo1>
git clone account1:<NameAccount2>/<Repo2>

(<...>是占位符值,意味着被替换:不保留<>)

  1. 在每个存储库中设置正确的提交授权
cd ~/<repo1>
git config user.name <NameAccount1>
git config user.email <NameAccount1@email.com> # the one registered with GitHub
cd ~/<repo2>
git config user.name <NameAccount2>
git config user.email <NameAccount2@email.com> # the one registered with GitHub

在这些步骤之后,每次提交都将使用正确的GitHub帐户完成,并推送到正确的GitHub存储库。

您只能使用一个ssh密钥,只需将pub密钥添加到两个github帐户。