【前言】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密钥,请相应地更新启动脚本中的路径。