Issue 140 - ShaoClean/Alune GitHub Wiki

Issue #140:文件树按 Git 状态显示颜色

背景、目标与范围

文件视图此前所有条目颜色相同,用户需要切换到改动视图确认 Git 状态。本次在现有目录树上增加状态颜色、字母标记和中文可访问名称;本机及 SSH 共用仓库状态数据,不增加 Git 查询接口或更改数据格式。

方案与取舍

状态 标记 颜色
新增 A 绿色文字和背景
未跟踪 U 绿色文字和背景
修改 M 琥珀色文字
重命名/复制 R/C 绿色文字
删除/冲突 D/! 红色文字

颜色语义参考 VS Code,具体色值复用 Alune 的 --green、--green-soft、--orange、--red,由现有浅色/深色主题解析。悬停使用绿色混色,选中保留蓝色侧边标识、加粗文件名,键盘聚焦保留轮廓。

同一路径多状态优先级:冲突 > 删除 > 新增 > 重命名 > 复制 > 修改 > 未跟踪。已暂存新增后继续修改仍显示绿色。目录用圆点汇总优先级最高的子项状态;普通干净文件及忽略文件不着色(2026-10-01 基线;忽略状态补齐见下方 2026-10-07 记录)。Git 路径按字面值处理,不转换合法的反斜杠、空格或换行。

文件树仍以磁盘条目为准,不插入已删除的虚拟文件;刷新前保留的旧条目若仍存在可显示 D。状态签名变化时刷新可见目录和预览并保留展开/选择;相同状态的重复响应不额外读取目录。未更改原有仓库状态刷新周期。

验收标准

  • 未跟踪及已暂存新增文件显示绿色背景。
  • 修改、重命名、冲突等状态有相应配色与文字标记。
  • 干净文件正常显示;显式刷新后状态与 Git 一致。
  • 深浅主题、悬停、选中和键盘聚焦可辨认。
  • 本机和 SSH 共用规则,目录展开、选择和预览正常。

验证记录

2026-10-01,macOS;真实临时 Git 仓库、本机 Chromium、隔离的本机 SSH/SFTP 服务。创建了真实合并冲突,同时覆盖新增已暂存后再修改、未跟踪、修改、重命名、删除及干净文件。

检查 结果
npm test -w web(发起 PR 前复跑) 203 项通过
npm run build -w web(发起 PR 前复跑) 通过;已有 bundle 大小提示
git diff --check 通过
新增状态规则及特殊路径测试 通过,包括真实 Git 暂存、重命名、删除及提交恢复干净
深浅主题正常/选中/悬停文字对比度 ≥ 4.5:1
本机/SSH 目录展开、选中及预览 通过
取消暂存 A → U、放弃后清除 M 显式刷新后通过
新文件出现在已打开的树中 显式刷新后通过
提交后清除所有状态标记 本机/SSH 通过,选中和预览保留

复验 fixture:先构建 shared、ssh-client、server 和 web,再运行 node apps/web/tests/files-status-fixture.cjs,打开输出的本机及 SSH URL。测试数据位于临时目录,退出时清理。

前后截图

以下为实际验收截图的文件树区域裁剪,未修改界面内容;截图采集于本功能工作区,裁剪排除了当时并行进行的 #135 文件操作工具栏。修改后出现的 appeared-after-open.txt 用于验证刷新新增条目。代码提交已与 #135 分离,PR 前测试和构建再次通过。

主题 修改前 修改后(新增条目选中、悬停且键盘聚焦)
浅色 Alune 文件树修改前浅色 Alune Git 状态配色浅色
深色 Alune 文件树修改前深色 Alune Git 状态配色深色

Alune 提交后清除所有状态标记

未验证项、风险与回退

  • 后台定时刷新在浏览器验收中未触发;未标记为通过。状态同步验收使用显式“刷新仓库”,本 PR 不调整刷新周期。
  • 未验证 Windows/Linux 原生桌面应用;SSH 为真实协议连接至本机隔离服务,未使用私人远程服务器。
  • 无持久化或数据库迁移。回退代码提交可移除装饰;Wiki 独立维护,代码回退不会自动回退本页。

2026-10-07 补充:忽略文件灰色显示

PR #207 补齐 Git 忽略文件与目录的灰色装饰,采用 VS Code 默认浅色 #8E8E90 和深色 #8C8C8C。通过目录读取时的批量 Git 查询识别忽略状态,本地与 SSH 共用实现;已跟踪路径及 ! 例外保持相应状态,选择、展开及预览可正常使用。

实现和验收已完成,PR 待审阅;代码提交 67956bf。补充验收记录 包含 31 项前端测试、8 项真实 Git/SSH 测试、构建、Electron 深浅主题及显式刷新结果和前后截图。后台自动刷新及 Windows/Linux 原生界面继续标记为未验证。