Windows 上用 subst 把项目目录挂成一个盘符,日常开发长期这么用会踩坑吗?

项目目录嵌套到七八层以后,命令行里光 cd 就得敲半行。构建脚本、调试配置、各种工具的设置里也到处写着这串长路径,哪天挪一下目录就要满世界改。subst 能把一个路径挂成虚拟盘符,比如把那串长路径挂到 P:,脚本里只写 P:\ 开头,看上去很省事。打算长期这么用之前,想问问有没有人踩过坑。

官方文档写了什么

Microsoft Learn 上的 subst 页面内容不多,能确定的就这几条:

  • 用法是 subst <盘符>: <路径>,比如页面上的例子 subst z: b:\user\betty\forms,挂好以后输入 z: 就能直接进到那个目录。
  • subst <盘符>: /d 删除这个虚拟盘符,不带参数运行 subst,会列出当前生效的虚拟盘。
  • chkdsk、diskcomp、diskcopy、format、label、recover 这几个命令在 subst 出来的盘上不能用,文档原话是 must not be used。
  • 盘符必须在 lastdrive 指定的范围内,否则会报 Invalid parameter - drive1:。

开发时关心的那几件事,文档一句都没提。

下面几点只能自己试

下面这些没有官方说法,也还没实际测过,列出来是想请有经验的人对一下,或者照着自己验证:

  • 重启以后盘符还在不在,可以挂好后重启一次,再不带参数跑 subst,看列表里还有没有。如果没了,有人会把挂载命令放进登录时执行的脚本里,这个做法稳不稳也得自己观察一段时间。
  • 管理员终端和普通终端看到的是不是同一套盘符,可以分别开一个,各跑一次 subst 对比输出。
  • IDE 记下的是哪条路径,得自己看:从 P:\ 打开项目,再看最近项目列表、断点、调试配置里存的是盘符路径还是原始长路径。同一个项目从两条路径各打开一次,会不会被当成两个项目、索引建两遍,也要试了才知道。
  • Git 那边,可以在 P:\ 和原路径下各跑一次 git status,看输出一不一致。再留意钩子脚本和编辑器里的 Git 面板显示的路径,有没有一边是盘符、一边是长路径的情况。
  • subst 盘跟映射网络驱动器有什么不同:文档只说 subst 是把路径关联到盘符,没跟网络映射盘做比较。两者在权限、断线、其他程序能不能看到这些方面有没有差别,得实际试过才知道。

自己测的话,最好每一项都在刚重启完的干净状态下做。顺手记下 Windows、IDE 和 Git 的版本,回帖时一起贴出来,别人才好对照。同一台机器上结论也可能随系统更新变化,过一阵复测一次不算多余。

还有一条是文档里明确写了的:别在 subst 出来的盘上跑 chkdsk 或 format 之类的磁盘命令,要查盘就对原始的物理盘操作。

想问的

如果团队里每个人都用同一个盘符,脚本和配置里的路径就能统一,这一点很吸引人。可一旦某台机器忘了挂,或者那个盘符已经被别的盘占了,构建多半就跑不起来。这个风险划不划得来,要看上面那几点实际表现怎样。

另一种思路是不挂盘符,把长路径收进环境变量或者工具各自的配置里,缺点是每个工具的写法不一样,维护起来更散。两条路各有代价,想听听实际用过的人怎么取舍。

长期用 subst 做开发目录的,重启、IDE 和 Git 这几块实际表现怎么样?