Repository navigation
GitMate 1.11.0
跨平台收尾。先说清查结论:真正跟平台相关的只有两处,都在 Host 侧,其余全部与平台无关。
清查结果
| 项 | 状态 |
|---|---|
| 命令引号 | PowerShell 单引号翻倍 / POSIX 闭合-转义-重开,按 process.platform 选择 ✓ |
| 环境变量 | 走 shell 请求的 env 字段,而不是 POSIX 的 VAR=value 前缀 ✓ |
| 路径 | 全部 node:path ✓ |
| 写文件 | 只写操作的那个仓库里的 .gitignore;lib/ 之外不写任何东西 ✓ |
| 执行位 | 不写任何需要执行位的文件 ✓ |
git init |
-b <branch>,与平台无关 ✓ |
| 沙箱识别 | DSH 那段拒绝文本三平台一致,所以识别逻辑本来就通用 ✓ |
这次补的两处
1. 沙箱起不来时的建议,按平台给。
原来一律说"Windows 上最常见的原因是 %TEMP% 不可写"——对 Linux 用户是错的指引。现在:
- Linux → 缺 bubblewrap,或内核不支持 Landlock
- macOS →
sandbox-exec不可用 - Windows →
%TEMP%不可写 - 其它平台 → 中性建议
(createHostText 接受 platform 参数,可注入,所以四个分支在一台 macOS 上就能全部测到。)
2. git 装不上时提示去确认 PATH —— 容器或刚装好的系统上这是最常见的原因。
验证
node test/smoke.mjs # 598 项断言新增 13 项,其中最关键的一组是恶意文件名端到端:往仓库里放一个同时含空格、单引号、$、分号的文件名,然后 stage → status → commit → diff 全走一遍。
这是引号唯一会以**"数据丢失"**而不是"报错"形式出问题的地方,而且三个平台共用同一条代码路径——所以它值得一个端到端断言,而不是只测 quoteFor 的字符串输出。
另外四个平台分支各自的建议、以及"每个分支都保留原始原因"都有断言。