Git 多账号配置

1,427 阅读3分钟

工作中一般会使用 git 进行代码提交,公司项目一般会为我们开启一个 git 账号,同时我们自己平常也会在 GitHub 中维护一些私人练习项目,这个时候就需要同时切换多个 git 账号,我们可以使用 SSH 方式登录进行代码提交,具体步骤如下:

  • 1. 新增密钥
  • 2. 将 ssh-key 添加到 ssh-agent 信任列表
  • 3. 添加公钥到 git 账户中
  • 4. 在 config 文件中配置
  • 5. 验证

1. 新增密钥(ssh-key)

ssh-keygen -t rsa -C "邮箱地址"

执行完上述命令后, 会提示输入密钥文件保存路径, 默认为(C:\Users\用户/.ssh/id_rsa),你可以修改为你自己要保存的路径, 一般可以配置为:

C:\Users\用户/.ssh/id_rsa_key

后面 key 为你当前密钥的标识

输入回车后需要你输入密钥密码,添加确认后一路回车就可以正常生成一套密钥文件,其中包含公钥和私钥

image.png

查看.ssh目录,如果出现这两个文件说明已经成功生成了(config是自己手动创建的

image.png

后缀为 id_rsa 的是私钥,存放在自己电脑中, id_rsa.pub 是公钥,需要配置到 git 账户中

2. 将 ssh-key 添加到 ssh-agent 信任列表

输入一下命令,出现 Identitiy added: ~/.ssh/id_rsa_key,就表示添加成功了。

ssh-add C:\Users\用户/.ssh/id_rsa_key

image.png

3. 添加公钥到 git 账户中

将公钥文件(id_rsa.pub)中内容拷贝到密钥框中,并输入对应标题加以描述就OK了

GitHub 中配置

image.png

GitLab 中配置

image.png

4. 在 config 文件中配置

打开.ssh目录下config文件并编辑,如果没有就新建一个,添加内容

Host  github
Hostname github.com
IdentityFile C:\Users\用户\.ssh\id_rsa_key
User 用户名
Host:仓库网站的别名
(注:Host 就是可以替代 HostName 来使用的别名,而且后面验证是否成功需要这个名字) 
HostName:仓库网站的域名(IP地址也可以)
User:用户名
IdentityFile:私钥的路径

5. 验证

经过上述步骤后就基本完成了, 最后我们可以输入下面命令进行验证下

ssh -T git@xxxx

这个命令中的xxxx就是上面config配置文件中的Host的值

image.png

一般第一遍会让你输入 yes 确认一下, 再次输入命令就可以了

6. 使用

使用的时候只需要选择 SSH 就可以了,之前默认的是 HTTPS

image.png

7. 常见问题解决

1. Windows ssh-add 报错 Error connecting to agent No such file or directory

解决步骤:

  1. 管理员身份启动 「Windows PowerShell」。

  2. 运行以下指令,检查 ssh-agent 服务是否启动成功。

    get-service ssh*
    
  3. 启动服务, 使用以下两条指令启动ssh-agent服务

    Set-Service -Name ssh-agent -StartupType Manual
    Start-Service ssh-agent
    
  4. 运行以下指令查看 ssh-agent 已经添加的秘钥

    ssh-add -l
    
  5. 重新添加

2. Key is invalid. You must supply a key in OpenSSH public key format

git 账号配置中你选错密钥了,应该是使用公钥,而你用成私钥了, 也就是用 id_rsa.pub 中的内容

3. fatal: Could not read from remote repository.

出现这错误一般是以下两种原因:

  • 客户端与服务端未生成 ssh key
  • 客户端与服务端的ssh key不匹配

重新按着上面步骤生成一遍就好了

4. error: src refspec master does not match any

github 新建项目默认选择 main 分支, 需要将 master 分支改为 main

git branch -m master main

也可以直接提交到 master 分支