macos git多账户管理核心是:为各账号生成专属ssh密钥(如id_ed25519_github)、配置~/.ssh/config绑定host别名与私钥、取消全局user设置并改用仓库级git config指定name/email,克隆时须用config中定义的host别名(如git@github.com-personal),最后通过ssh-add加载密钥并ssh-t测试连通性。
macos 中配置 git 多账户管理,核心是让不同仓库自动使用对应的身份(ssh 密钥 + 本地用户信息),而不是靠全局设置“一把钥匙开所有门”。这不是 git 本身不支持分布式,而是默认配置没做隔离——只要把 ssh 身份路由和仓库级提交信息分开管,就能自然适配多平台、多角色的分布式协作场景。
生成独立 SSH 密钥对
每个 Git 账户必须配专属密钥,不能共用 id_rsa。密钥名要能区分用途,比如:
-
个人 GitHub:用
ssh-keygen -t ed25519 -C "me@personal.com" -f ~/.ssh/id_ed25519_github -
公司 GitLab:用
ssh-keygen -t ed25519 -C "you@company.com" -f ~/.ssh/id_ed25519_gitlab -
码云 Gitee:用
ssh-keygen -t ed25519 -C "you@gitee.com" -f ~/.ssh/id_ed25519_gitee
生成后,.pub 文件内容需分别粘贴到对应平台的 SSH Keys 设置页(GitHub Settings → SSH and GPG keys;GitLab → Preferences → SSH Keys 等)。
配置 SSH 自动路由(~/.ssh/config)
在 ~/.ssh/config 中为每个平台定义 Host 别名,绑定域名和私钥。例如:
# GitHub 个人账号 Host github.com-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github <h1>公司 GitLab</h1><p>Host gitlab.example.com HostName gitlab.example.com User git IdentityFile ~/.ssh/id_ed25519_gitlab</p><h1>Gitee</h1><p>Host gitee.com-work HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee</p>
注意:克隆时必须用别名,比如 git clone git@github.com-personal:me/project.git,而不是 git@github.com:...,否则 SSH 不会加载对应密钥。
取消全局用户配置,改用仓库级设置
运行以下命令清空可能干扰的全局设置:
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
git config --global --unset user.name<br>git config --global --unset user.email
然后进入每个项目目录,单独配置身份:
- 个人项目:
git config user.name "Me"和git config user.email "me@personal.com" - 公司项目:
git config user.name "Your Name"和git config user.email "you@company.com"
这样每次 commit 的 author 信息就与仓库用途严格匹配,不会出现“公司邮箱提交了个人博客”这类混淆。
启用并验证 SSH Agent
确保密钥被系统识别:
eval "$(ssh-agent -s)"<br>ssh-add -K ~/.ssh/id_ed25519_github<br>ssh-add -K ~/.ssh/id_ed25519_gitlab<br>ssh-add -K ~/.ssh/id_ed25519_gitee
用 ssh-add -l 查看是否已加载;再分别测试连接:
-
ssh -T git@github.com-personal→ 应返回 “Hi me! You've successfully authenticated…” ssh -T git@gitlab.example.comssh -T git@gitee.com-work
任一失败,重点检查 config 中的 Host 名是否与克隆/推送时使用的 host 完全一致,以及公钥是否已正确添加到对应平台。










