【前言】git是程序员们的必备工具,当我们在很多个git网站上申请了仓库,设备上需要配置不同的git的邮箱,账户和密钥,本文详细介绍了如何在 Mac 设备上如何配置多个git 账户和密钥,如有不足,欢迎留言。
1.用户名和邮箱
git 全局配置的用户名和邮箱是默认的配置,最好 不 要 删 除,删除的话,在vscode中提交代码会报错,说没有检测到 user.name
和 user.email
,此时我们是没办法提交代码的,所以不要看了某些文章说要删掉,呵,不要删,删了有问题。
那么,如果说全局的配置user.name
user.email
和我们从 github
克隆的账户和邮箱不一致,例如我们全局配置的是公司账户下(gitlab
)的 user.name
user.email
,但是呢,我们学习的时候从自己的github
上的仓库里 clone
下了代码,改了改,准备提交,此时如果说不进行任何操作,那么使用的是全局的user.name
user.email
的配置,那么就是有问题的。那如何解决这个问题呢?
我们说有全局的配置,就有一定有局部的配置,我们可以在项目的根目录下执行局部 git
命令,配置局部的 user.name
user.email
即可。有点像那个项目下的 package.json
局部设置了就使用局部配置,局部没设置就往上一级找,一般是用全局配置。
这里给大家贡献下设置的代码
1.1 全局配置
设置全局 user.name
user.email
git config --global user.name "your_name"
git config --global user.email "your_email@foxmail.com"
1.2 局部配置
设置局部的 user.name
user.email
(请在终端中打开我们项目所在的位置的根目录再执行此代码)
git config user.name "yourname"
git config user.email "youremail@foxmail.com"
1.3 生效检测
查看是否生效
git config --global user.name
git config --global user.email
当然我也提供下删除的命令,虽然不建议删除,不过想删你就删
git config --global --unset user.name git config --global --unset user.email
2.本地生成新的SSH key
2.1 打开终端,执行命令
cd ~/.ssh
ssh-keygen -t rsa -C "email"
2.2 自定义文件名称
默认名称是 id_rsa
, 但是我们为了后边好区分,我们这里需要自定义名称,例如 github 的,我们命名为 id_rsa_github
,以此类推(gitlab --> id_rsa_gitlab
; gitee --> id_rsa_gitee
)
Enter file in which to save the key (~路径/.ssh/id_rsa): id_rsa_github
验证SSH Key
cd ~/.ssh
ls
cat id_rsa_github.pub
其实如果你不想使用 cat
命令, 你就这样,先 cd ~/.ssh
然后执行 open ./
这样你就能够在文件夹中看到你生成的文件,然后双击,或者直接拖拽到 vscode,你就能够直接看到 SSH Key了
不过我想说的是,我们这里声称的 SSH Key 有两个文件,一个带后缀名 .pub
例如 id_rsa_github.pub
另一个没有后缀名,那么区别是什么呢?—— 分别为公钥和私钥,我们需要配置在 github
gitlab
gitee
上的是公钥,即是那个带 .pub
后缀的文件中的 秘钥,别搞错了哦。
3. 添加并识别SSH Keys
系统默认读取的是 id_rsa , 这里我们需要关联我们自己的文件
ssh-agent bash #这行命令可以不执行,放在这里只是说别的文章有,查了下资料,这个只是为了某些设备兼容
ssh-add ~/.ssh/id_rsa_github
4. 复制公钥并添加到git网站
pbcopy < id_rsa_github.pub
添加到github 的SSH Key中,路径为 User > Setting > SSH Key
5. 创建并配置 config 文件
创建文件
touch ~/.ssh/config
打开文件
open ~/.ssh/config
写入配置
Host *
AddKeysToAgent yes
UseKeychain yes
Host github
HostName github.com
User kevinlaizhiyu
IdentityFile ~/.ssh/id_rsa_github
Host gitlab
HostName git.xiujiadian.com
User laizhiyu
IdentityFile ~/.ssh/id_rsa_gitlab
Host gitee
HostName gitee.com
User kevintauraus
IdentityFile ~/.ssh/id_rsa_gitee
由于这个配置文件中最好不要带上注释,所以我单独解释下各个字段的含义
Host *
AddKeysToAgent yes
UseKeychain yes
# 这三行,就是,以前需要写这个,然后执行命令 ssh-add -K ,
# 只需要添加一次就能够开启自动生效,后来mac上不能这么玩了,
# 就用 ssh-add --apple-use-keychain ,
# 再后来,后一种方法都不能永久生效了,
# 每次开机都要重新执行 ssh-add ~/.ssh/id_rsa_github
# 就很麻烦,文章的后边我会讲一下如何处理,先把主要问题解决弄完
Host github # 域名缩写
HostName github.com # 域名
User kevinlaizhiyu # github上的用户名,就是你每个仓库前面的前缀
IdentityFile ~/.ssh/id_rsa_github # 秘钥地址
# 其他配置,自己类比
6. 验证连接git
ssh -T git@github.com //执行成功打印
// Hi XXX! You've successfully authenticated, but GITEE.COM does not provide shell access.
// Welcome to GutHub, @XXXXX!
7.常见问题
7.1 Permission denied(Publickey)
要么就是密钥配错,要么就是没有添加到 SSH 钥匙链
密钥配错就重新配一下,详见前文;
没有添加就重新添加下,代码如下:
ssh-add ~/.ssh/id_rsa_github
7.2 Mac重启之后不生效
那是因为 ssh-add 这个命令,是临时的,也就是说电脑关机充值之后就不生效了,之前mac还能够添加一次永久生效,现在不行了,那咋整?两个思路:
思路一:利用mac的自动化,将代码写到自动化执行脚本中,然后再 设置>群组>登录项 中添加这个自动化的脚本文件,这样每次开机就会自动执行这个脚本。下边我会附上详细的配置方法,但是我需要说明的是,即便是我们配置好了,mac重启之后只会打开这个自动化脚本的执行页面,需要手动点击执行按钮,电脑才会执行脚本,效率不高。
如果我们想要实现开机自动执行脚本,且不需要人为干预,咋弄了?
思路二:新建一个ssh-add.sh,写入 ssh-add 命令,然后配置开机自动执行
好,下面是两种思路的详细的操作说明
思路一 自动化
- 选择 “自动操作” 这个机器人
- 添加脚本并命名
- 设置 -> 用户与群组
- 添加登录项
重启之后,我们会看到电脑打开了自动化的页面,此时需要我们手动点击“执行”按钮,方可生效
思路二 自定义脚本
要在Mac开机后自动执行多个Shell命令,你可以创建一个启动脚本(startup script)来批量执行这些命令。以下是在开机后自动执行多个ssh-add
命令的步骤:
- 打开终端。
- 创建一个新的启动脚本文件。可以使用以下命令创建一个名为
ssh-add-keys.sh
的文件:
nano ssh-add-keys.sh
- 在打开的文件中,添加以下内容:
#!/bin/bash
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitlab
ssh-add ~/.ssh/id_rsa_gitee
这个脚本将依次执行每个 ssh-add
命令,添加对应的SSH密钥。
- 保存文件并退出编辑器。
- 将启动脚本设置为可执行权限。在终端中执行以下命令:
chmod +x ssh-add-keys.sh
- 然后 在用户与群组->登录项 中添加这个文件
ssh-add-keys.sh
- 重启你的Mac。
现在,在每次开机后,系统会自动执行启动脚本中的ssh-add
命令,以将对应的SSH密钥添加到密钥链中。
请注意如果你更改了SSH密钥的路径或添加了其他SSH密钥,请相应地更新启动脚本中的路径。