必须排除vendor/、node_modules/、cache/、logs/等本地生成且无需部署的目录,因其体积大、内容动态,上传易致权限错误或服务异常;排除需在Deployment配置中设绝对路径,而非仅标记Excluded。

远程同步时哪些目录必须排除
不加区分地同步整个项目,轻则拖慢上传速度、触发误覆盖,重则把 vendor/、node_modules/、cache/、logs/ 这类目录传到线上,导致权限错误或服务异常。这些目录的共同点是:本地生成、无需部署、体积大、内容动态变化。尤其 vendor/ 如果用 Composer 全局安装或远程 autoloader,本地副本纯粹用于 IDE 补全,完全不该上传。
两种排除方式不能混用:Excluded vs Deployment Exclusion
这是最容易搞错的地方:Mark Directory as → Excluded 只影响 PhpStorm 自身(索引、搜索、补全),对远程部署毫无作用;真正控制上传/下载的是 Deployment 配置里的排除路径。两者独立生效,必须分别设置。
- 右键目录 →
Mark Directory as → Excluded:让 IDE 忽略该目录,加快打开速度,但Upload to [server]仍会把它传上去 - 在
Settings → Build, Execution, Deployment → Deployment → Excluded Paths里添加路径:这才是阻止上传/下载的唯一有效手段 - 如果目录不在项目视图中(比如被
.gitignore隐藏),先在 Project 面板顶部下拉菜单选Show All Files,再右键标记为 Excluded
在 Deployment 中添加远程排除路径的实操要点
进入 Settings → Build, Execution, Deployment → Deployment,切换到 Excluded Paths 标签页,点击 Add 后的关键动作:
- 必须填绝对路径:比如
/var/www/html/myapp/storage/logs,不能写storage/logs或~/storage/logs - 路径末尾不加斜杠:填
/var/www/html/myapp/storage即可,加了/反而可能匹配失败 - 排除是递归的:一旦
/var/www/html/myapp/storage被加入列表,其所有子目录(logs/、cache/、framework/)自动受保护 - 只能排除文件夹:单个文件无法在此处排除,如需跳过某个配置文件,得靠
Settings → Editor → File Types → Ignore files and folders(仅影响本地索引)
为什么排除后还是上传了?检查这三点
常见“排除失效”现象,基本都卡在这几个环节:
立即学习“PHP免费学习笔记(深入)”;
-
Deployment path on server和Root path不一致:比如 Root path 填了/var/www/html,Mappings 里 Deployment path 却填成/myapp,那排除路径就得对应写成/var/www/html/myapp/storage,而不是只写/myapp/storage - 用了
On file change模式:编辑器临时保存、插件自动格式化都会触发上传,绕过你设的排除逻辑;务必切回On explicit save action - 排除路径没生效于当前服务器配置:Deployment 配置支持多服务器,确认你正在编辑的是「Default server」,且排除路径确实列在它的
Excluded Paths页下
最隐蔽的问题是路径映射和排除路径的层级关系——它不是字符串匹配,而是基于部署根路径的树形判断。少一个目录层级,就等于整个分支没拦住。



















