git bash中ls -la不显示软链接目标,因默认未启用ntfs符号链接支持,需在vscode配置中为bash.exe添加--enable-ntfs-symlinks参数,并赋予windows用户“创建符号链接”权限,缺一不可。

Git Bash 终端里 ls -la 不显示软链接目标怎么办
Windows 上 Git Bash 默认不解析 NTFS 软链接(symlink),ls -la 只显示 lrwxr-xr-x 权限但不显示箭头指向的目标路径,readlink 也常返回空或错误。这不是 VSCode 的 bug,而是 Git Bash(MinGW)在 Windows 上对 symlink 的默认行为限制。
- Git Bash 启动时未启用 symlink 支持(需显式开启
--enable-ntfs-symlinks参数) - Windows 用户账户无“创建符号链接”权限(尤其非管理员账户)
- VSCode 集成终端启动方式绕过了该参数,导致即使系统级配置了也不生效
terminal.integrated.profiles.windows 必须加 --enable-ntfs-symlinks
仅把 bash.exe 路径写进配置是不够的。Git Bash 在 Windows 下要正确识别和展开软链接,必须在启动参数中显式启用 NTFS symlink 支持。否则 ls -l、stat、realpath 等命令行为异常,且 VSCode 内置文件资源管理器也无法正确跳转到软链接目标。
- 打开
settings.json,确保terminal.integrated.profiles.windows中的Git Bash配置包含"args"字段 -
"args"必须为数组,且至少包含"--enable-ntfs-symlinks"(注意双横线) - 路径仍用
bash.exe,不是git-bash.exe;后者是 GUI 封装,不支持该参数
{
"terminal.integrated.profiles.windows": {
"Git Bash": {
"path": "C:\Program Files\Git\bin\bash.exe",
"args": ["--enable-ntfs-symlinks"],
"icon": "terminal-bash"
}
},
"terminal.integrated.defaultProfile.windows": "Git Bash"
}
Windows 权限不足会导致 symlink 读取失败但无提示
即使加了 --enable-ntfs-symlinks,普通用户账户在 Windows 10/11 上默认没有“创建符号链接”权限(SeCreateSymbolicLinkPrivilege)。这会导致 Git Bash 能启动,也能创建软链接(ln -s 成功),但后续读取时会静默失败——ls -la 显示链接但目标为空,readlink 返回空字符串,cd 进入软链接后报 No such file or directory。
- 必须以管理员身份运行“本地安全策略”(
secpol.msc)→ 安全设置 → 本地策略 → 用户权限分配 → 找到“创建符号链接”→ 双击添加当前用户 - 或者用 PowerShell(管理员)执行:
whoami /user获取 SID,再用icacls或组策略工具赋权 - 重启 VSCode(不是仅关闭终端,是完全退出进程)才能使权限变更生效
VSCode 文件资源管理器不跟随 symlink 是设计如此,不是配置问题
即使终端里 ls -la 正确显示软链接并能 cd 进入,VSCode 左侧文件资源管理器仍不会自动展开或跳转到软链接目标目录。这是 VSCode 的明确设计限制:它只解析自己加载的 workspace 文件树,不主动跟随 OS 层级的 symlink。
- 想在资源管理器中看到目标内容?只能手动将软链接指向的物理路径也添加为 workspace folder
- 编辑器内点击软链接文件时,会按实际路径打开(这个行为是正常的,且依赖终端层 symlink 解析是否成功)
- 别指望
Ctrl+Click跳转软链接目录——它只对项目内相对路径或已加载的文件有效
cd 进去就报错”这类隐蔽问题。











