deployment上传时缓存目录仍被传输,因排除规则必须配置在tools > deployment > configuration > options > exclude items by name中,格式为storage/logs/, bootstrap/cache/, *.log(尾部斜杠不可省),.gitignore和mark as excluded对其无效。

Deployment 上传时缓存目录(如 storage/logs、bootstrap/cache)还在传?不是没配,是规则写错位置或语法不对。
Deployment 的排除规则只认 Options → Exclude items by name
很多人在 .gitignore 里写了 storage/logs,或右键目录选了 Mark as Excluded,结果上传照常发生——因为 Deployment 是独立通道,它完全不读 Git 配置,也不认 IDE 索引级的排除状态。
-
Tools > Deployment > Configuration > Options页面里的Exclude items by name输入框,才是唯一生效位置 - 填入格式必须是逗号分隔的通配路径,例如:
storage/logs/, bootstrap/cache/, .env.local, *.log - 务必带尾部斜杠:
storage/logs/表示整个目录及其所有子内容;写成storage/logs(无斜杠)可能只匹配同名文件,漏掉日志文件 - 支持通配符,但
**在这里无效——这是 Deployment 的排除字段,不是 Mappings 里的Excluded paths,别混用
为什么 Mark as Excluded 对上传没用
右键目录 → Mark as Excluded 只影响本地索引:目录变灰、跳转失效、补全消失、状态栏提示 Indexing paused for excluded files。但它对 Deployment 完全无感。
-
Mark as Excluded的配置存在.idea/{project}.iml,纯本地语义 - Deployment 规则存在
.idea/deployment.xml,两者物理隔离 - 哪怕
storage/logs已经灰成背景板、Ctrl+Click 跳不进去、搜索也搜不到——只要Exclude items by name没写它,上传时照样打包推上去 - 后果很直接:日志文件频繁写入,触发大量小文件上传;二进制缓存内容可能损坏远程解析;更糟的是,某些框架(如 Laravel)会因缓存文件权限异常导致 500 错误
多环境部署下,每套服务器都要单独配排除规则
如果你用了 dev/staging/prod 多套 Deployment 配置,Exclude items by name 不会自动同步——每套服务器的 Options 标签页都得手动检查一遍。
- 打开
Tools > Deployment > Configuration,左侧列表点中目标服务器(比如staging),再切到Options标签页 - 确认
Exclude items by name里包含:storage/logs/, bootstrap/cache/, dist/, node_modules/, *.log - 别依赖“复制配置”:IDE 不提供 Deployment 排除规则批量同步功能
- 容易漏掉的点:
dist/排除后前端资源 404?那是因为你从没手动上传过构建产物——排除 ≠ 替代部署,它只是阻止增量同步,首次上线仍需主动上传一次dist/目录
最常被忽略的其实是时间戳比对机制:如果服务器和本地时间偏差超过 2 秒,PhpStorm 可能误判文件未变更而跳过上传,或反复上传同一文件。真要稳定,建议在 Options 里关掉 Compare content of files with same timestamp,改用内容比对。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










