.gitconfig中include.path本地生效SSH远程时Git报错排查
问题环境
- 工作机为Windows系统,已安装Git
- 用户目录下
%USERPROFILE%\.gitconfig配置文件包含如下include配置:
[include] path = .shared_gitconfig
- 同目录下存在
%USERPROFILE%\.shared_gitconfig文件,存储了部分自定义Git配置项。
运行表现差异
本地直接操作
本地直接登录机器操作时配置可正常生效,进入仓库路径执行git status返回结果正常:
PS C:\Users\User\Path\To\Repo> git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean
SSH远程操作
通过SSH协议远程连接到该机器后,执行Git命令会触发报错,操作流程与报错信息如下:
user@PC:~$ ssh RemotePC user@RemotePC C:\Users\User> cd Path\To\Repo user@RemotePC C:\Users\User\Path\To\Repo> git status fatal: bad config line 2 in file C:/Users/User/.gitconfig
问题解答
Git的include.path相对路径解析规则没有发生过变更,官方规则始终是相对路径相对于包含该include指令的配置文件所在目录解析。出现本地正常、SSH远程报错的核心原因是SSH会话下的Git运行环境和本地桌面登录环境不一致:
- 本地桌面登录时,Windows版Git可以正确识别用户主目录位置,加载
.gitconfig时会以文件自身所在的C:\Users\User目录为基准解析相对路径,能正确找到同目录下的.shared_gitconfig,配置加载无异常。 - SSH远程登录Windows主机时,系统启动的是非交互式Shell,多数SSH服务端不会完整加载Windows用户的环境变量,部分版本的Git for Windows在非交互式Shell下存在路径解析兼容bug:会错误地将执行Git命令时的当前工作目录作为
include.path相对路径的解析基准,而不是配置文件所在目录。当你进入仓库路径执行git status时,Git会尝试在仓库目录下查找.shared_gitconfig,找不到文件就会抛出配置行错误的提示。
最稳妥的修复方式是把include配置里的相对路径改成带~的路径,Git会自动将~解析为当前用户主目录,不受登录方式、当前工作目录的影响,修改后的配置如下:
[include] path = ~/.shared_gitconfig
修改后无论本地操作还是SSH远程操作,Git都能准确定位到共享配置文件,不会再出现解析报错。
内容的提问来源于stack exchange,提问作者Mate de Vita
相关产品推荐
相关产品推荐

