Windows下.gitconfig默认存于%USERPROFILE%.gitconfig,但优先检查HOME环境变量;macOS新版Git可能存于~/.config/git/config而非~/.gitconfig。

Git配置文件不是“一个文件”,而是三个层级、位置不同、优先级分明的配置源,搞错层级或路径是90%配置失效的根源。
Windows下.gitconfig默认存哪?看环境变量,不是看用户名
执行 git config --global 时,Git不会硬编码 C:\Users\{用户名}\.gitconfig。它按顺序检查:
- 先查
HOME环境变量 —— 若你手动设过(比如配合WSL或某些IDE),就会写到那个目录下 - 没设
HOME,才 fallback 到USERPROFILE(通常是C:\Users\{用户名}) - 最终拼出完整路径:
$HOME/.gitconfig或$USERPROFILE/.gitconfig
所以如果你在PowerShell里执行成功,但在CMD里查不到,大概率是两个终端读取的环境变量不一致。用 echo %USERPROFILE% 和 echo $env:HOME 分别验证。
Mac上~/.gitconfig找不到?它可能藏在~/.config/git/config
macOS新版Git(尤其是通过Homebrew安装的)会优先使用 XDG Base Directory 规范,把全局配置写进 ~/.config/git/config,而不是传统的 ~/.gitconfig。两者互斥,Git只读其中一个:
- 如果
~/.config/git/config存在,Git就忽略~/.gitconfig - 如果都不存在,首次
git config --global会创建~/.gitconfig - 想强制统一用
~/.gitconfig,删掉~/.config/git目录即可
验证命令:git config --global --show-origin user.name —— 它会直接告诉你值从哪个文件读的。
为什么git config --list看到一堆重复项?三层配置叠加了
git config --list 默认合并输出系统级、全局级、仓库级三处配置,同名项以后者覆盖前者。常见混淆点:
-
git config --system --list只读C:\Program Files\Git\etc\gitconfig(Windows)或/etc/gitconfig(macOS/Linux) -
git config --global --list只读用户级(.gitconfig或~/.config/git/config) -
git config --local --list只读当前项目.git/config,必须在仓库根目录下运行
例如:你在某项目里执行了 git config user.email "work@company.com"(没加 --global),那这个邮箱只会出现在该仓库的提交中,--global 查不到它 —— 这不是bug,是设计。
配置写进去了但没生效?检查是否被.git/config覆盖
本地仓库的 .git/config 文件拥有最高优先级。哪怕你全局设置了 user.name,只要进到某个项目里执行过 git config user.name "override",那个项目就永远用 override 的名字提交。
- 检查方式:
cat .git/config(在项目根目录下) - 删除某项本地配置:
git config --unset user.name - 清空整个本地配置(慎用):
rm -f .git/config,然后git init重建(会保留历史)
最容易被忽略的是:IDE(如VS Code、IntelliJ)有时会自动往 .git/config 写代理或 credential helper 配置,它们可能干扰你的自定义设置。


















