为什么Windows版Git Bash中执行which -a会显示多条重复的相同条目?
Git for Windows下which -a输出重复条目的原因及解决方案
重复输出的核心原因
- /bin与/usr/bin的重复是MSYS2的默认挂载逻辑
Git for Windows基于MSYS2运行时构建,默认将/bin和/usr/bin挂载映射到同一个实际Windows路径(对应你环境里的D:\_Apps\Git\usr\bin),两个路径指向完全相同的目录,因此查询时会输出两条指向同一个文件的结果。 - /usr/bin多次重复的根源是PATH变量存在重复条目
你可以在Git Bash中执行echo $PATH | tr ':' '\n'查看当前生效的所有PATH条目,大概率会看到对应/usr/bin的路径重复出现了3次。触发重复的常见场景有两个:- 你在用户级启动配置(
~/.bashrc、~/.bash_profile)或系统级启动配置(/etc/profile、/etc/bash.bashrc)中多次执行了PATH修改操作,反复添加了/usr/bin或对应的Windows路径D:\_Apps\Git\usr\bin - 你使用的便携版Git存在启动脚本异常,启动时重复注入了多次MSYS2默认路径
- 你在用户级启动配置(
- 与Windows where命令结果不一致的原因
Windows原生where命令读取的是系统层面的PATH变量,而Git Bash中的PATH是MSYS2运行时处理后的变量,会在原生PATH基础上额外添加MSYS2内置路径,同时会将重复的Windows路径转换为重复的UNIX格式路径,因此两边查询结果存在差异。
与Git命令运行缓慢的关联
该现象确实是Git命令运行缓慢的直接诱因之一。Bash执行任何外部命令时,都会按顺序遍历PATH中的所有条目查找对应可执行文件,PATH中重复条目越多,查找遍历的次数就越多,耗时自然会变长。如果PATH中还存在无效路径、或指向文件数量极多的目录,遍历耗时还会进一步增加。
修复方案
- 先执行
echo $PATH | tr ':' '\n' | uniq -d找出PATH中重复的条目,确认重复路径的来源 - 检查
~/.bashrc、~/.bash_profile中的PATH赋值代码,删除重复的PATH修改操作 - 如果用户配置无异常,可重置Git的系统级配置:备份个人配置后,用同版本官方便携版Git的
etc\profile、etc\bash.bashrc文件替换本地对应文件,或直接重新解压干净的官方便携版Git后再迁移个人配置。
内容的提问来源于stack exchange,提问作者m01010011
相关产品推荐
相关产品推荐

