问题描述
用户对 Nexus 做了本地定制(修改源码文件如 toolbarDefaults.ts、server.js 等),导致 git status --porcelain 非空。检查更新时系统检测到 dirty 状态,只显示警告,无法继续升级。
截图示意:
"本地有未提交的修改,请先处理后再升级。"
用户无法在保留自定义的同时跟随上游版本升级。
根本原因
/api/version 返回 clean: false 后,前端 dirty 状态只显示警告文字,没有提供任何可操作的升级路径。
当前升级命令:
git pull && cd frontend && npm run build && cd .. && pm2 restart nexus
不处理 dirty 状态,直接 git pull 遇到本地修改会报错或中止。
用户分类
| 类型 |
例子 |
是否会 dirty |
| 配置文件修改 |
.env, data/ |
否(已 gitignore) |
| 源码定制 |
toolbarDefaults.ts, server.js |
是 |
| 意外文件 |
手动创建的脚本 |
是(untracked) |
方案
短期(改善升级体验)
1. 升级命令改用 --autostash
git pull --rebase --autostash && cd frontend && npm run build && cd .. && pm2 restart nexus
--autostash 会自动 stash 本地修改 → pull & rebase → 自动 pop stash,适用于本地修改与上游改动文件不重叠的场景(大多数定制用户)。
2. Backend:返回 dirty 文件列表
/api/version 额外返回 dirtyFiles: string[],让前端展示具体哪些文件被修改。
3. Frontend:dirty 状态提供可操作选项
- 展示哪些文件被修改(让用户清楚 stash 的内容)
- 提供两个可复制的命令:
- 智能升级(推荐):autostash 方案,本地修改会被保留并尝试重新应用
- 强制升级:
git checkout . && git pull && ...,丢弃本地修改(加危险警告)
长期(架构支持定制)
将用户常见的定制点迁移到 gitignore 的配置文件(如 data/custom/toolbar-overrides.json),用户无需修改源码即可定制,从根源消除 dirty 问题。
受影响版本
v4.3.x / v4.4.x(用户反馈于 v4.3.12 → v4.4.5 升级时触发)
问题描述
用户对 Nexus 做了本地定制(修改源码文件如
toolbarDefaults.ts、server.js等),导致git status --porcelain非空。检查更新时系统检测到 dirty 状态,只显示警告,无法继续升级。截图示意:
用户无法在保留自定义的同时跟随上游版本升级。
根本原因
/api/version返回clean: false后,前端dirty状态只显示警告文字,没有提供任何可操作的升级路径。当前升级命令:
不处理 dirty 状态,直接
git pull遇到本地修改会报错或中止。用户分类
.env,data/toolbarDefaults.ts,server.js方案
短期(改善升级体验)
1. 升级命令改用
--autostash--autostash会自动 stash 本地修改 → pull & rebase → 自动 pop stash,适用于本地修改与上游改动文件不重叠的场景(大多数定制用户)。2. Backend:返回 dirty 文件列表
/api/version额外返回dirtyFiles: string[],让前端展示具体哪些文件被修改。3. Frontend:dirty 状态提供可操作选项
git checkout . && git pull && ...,丢弃本地修改(加危险警告)长期(架构支持定制)
将用户常见的定制点迁移到 gitignore 的配置文件(如
data/custom/toolbar-overrides.json),用户无需修改源码即可定制,从根源消除 dirty 问题。受影响版本
v4.3.x / v4.4.x(用户反馈于 v4.3.12 → v4.4.5 升级时触发)