必须清空全局 user.name 和 user.email,因为 Git 提交时优先使用全局配置,若未为仓库单独配置,易导致身份混淆、跨域提交,甚至触发企业安全审计告警;清空后需为每个仓库手动配置。

全局 user.name 和 user.email 必须清空,否则所有仓库默认用它提交,轻则身份混淆,重则触发企业安全审计告警。
为什么必须 unset 全局 user.name 和 user.email
Git 提交时作者信息优先读取全局配置。一旦设了全局值,哪怕你为某个仓库单独执行了 git config user.name "xxx",只要某次 clone 后忘了配、或脚本漏掉这步,就会误推成公司账号到个人仓库(或反过来)。同事看到提交记录里“张三”改了“李四”的私有项目,第一反应是权限出问题;更严重的是,某些企业 CI/CD 或审计系统会直接拦截这类跨域提交。
执行这两条命令彻底清除:
git config --global --unset user.name<br>git config --global --unset user.email
验证是否清空:git config --global --list 输出里不应再出现 user.name 或 user.email。之后每个仓库都得手动运行 git config user.name "xxx" 和 git config user.email "xxx"。
生成密钥时必须用 -f 指定文件名,别碰 id_rsa
Windows 下 Git Bash 默认只认 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519;macOS/Linux 也倾向默认路径。如果你先为 GitHub 生成一次 ssh-keygen -t ed25519 -C "me@github.com"(没加 -f),再为 Gitee 又跑一遍,第二次会直接覆盖第一次的私钥——结果就是两个平台共用一把钥匙,但服务器只认各自绑定的公钥,必然有一个连不上。
- 正确做法:每次生成都用
-f显式指定路径,例如ssh-keygen -t ed25519 -C "me@github.com" -f ~/.ssh/id_ed25519_github - 推荐统一用
ed25519算法(比rsa更快更安全),除非你要连老旧 GitLab 实例(部分 12.x 以下版本不支持) - 密码(passphrase)可跳过(连续回车),但若在共享电脑上,建议设一个
~/.ssh/config 里的 Host 必须是别名,不能是域名
很多人写 Host github.com,以为这样 git@github.com:me/repo.git 就能自动走对应密钥——错了。SSH 匹配的是 URL 中 @ 后面的部分,而 git@github.com 的主机名确实是 github.com,但问题在于:如果你有两个 GitHub 账号,它们都指向同一个域名,光靠 Host github.com 无法区分路由。
正确写法是定义别名,例如:
# GitHub 个人账号<br>Host github-personal<br> HostName github.com<br> User git<br> IdentityFile ~/.ssh/id_ed25519_github<br><br># GitHub 工作账号<br>Host github-work<br> HostName github.com<br> User git<br> IdentityFile ~/.ssh/id_ed25519_work
克隆时必须用别名:git clone git@github-personal:me/repo.git;已有仓库改 remote:git remote set-url origin git@github-work:org/repo.git。
测试连接失败?先跑 ssh -T,别猜
ssh -T git@github-personal 这类命令不是“走个过场”,它是唯一能快速定位 SSH 层问题的手段。常见错误和对应动作:
-
Permission denied (publickey):私钥没加进 agent(ssh-add ~/.ssh/id_ed25519_github),或config里IdentityFile路径写错(注意路径是否带空格、是否用了~符号,某些终端不展开) -
Could not resolve hostname github-personal:config文件格式错(比如少了换行、多了不可见字符)、或文件没保存在~/.ssh/config(注意权限应为600) - 连接成功但提示
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.:说明 SSH 层通了,问题一定出在 Git 配置或 remote URL 上
最容易被忽略的是:Windows 用户若用 CMD/PowerShell 而非 Git Bash,ssh-agent 不自动启动,ssh-add 无效;必须用 Git Bash 或 WSL 才能正常加载 config 和密钥。


















