Files
ycode/docs/沙盒内置Git分发-2026-10-18.md

66 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# YCode 内置 Git 分发(2026-10-18)
组件 **0.4.0 / protocol 1** 已将 Git 改为应用默认携带。普通用户不需要在电脑上安装 Git,也不需要执行 `toolchain-add git`。工具使用 `runtimes: ['git']` 选择内置运行时,首次使用会按[已有仓库规则](沙盒Git接入-2026-10-18.md)生成沙盒专用基线。
## 固定来源和文件
当前固定版本为 Git for Windows **2.56.0.windows.2**,来源为[官方 MinGit 发布](https://github.com/git-for-windows/git/releases/tag/v2.56.0.windows.2)。上游 ZIP 为 `MinGit-2.56.0.2-64-bit.zip`,39,806,486 字节,GitHub release asset 的 SHA-256 与下载实测一致:
```text
da35e72aa21c005a5a0d298cfbae110bc1609a815730ea0dde84b01a1b3cd3be
```
`resources/sandbox/git-runtime.lock.json` 同时固定版本、官方地址、上游归档摘要,以及确定性生成的运行时清单摘要。构建脚本从 ZIP 读取实际 UCRT/MinGW x64 PE 导入表,只保留 Git 主程序及其所需 DLL,不在宿主执行下载的程序。当前内置子集含 46 个文件、7,204,871 字节(约 7.2 MB),其中包括许可证、版权文本、上游包版本、来源和构建入口说明。Git Bash、SSH、凭证管理器及远程辅助程序不随这个子集提供。
生成资源为 `resources/sandbox/win32-x64/git/{manifest.json,files/**}`,不提交生成的二进制。`extraResources` 的 `git/**/*` 将整个子集带到应用的 `resources/sandbox/win32-x64/git`,保留在 asar 之外。主程序 manifest 固定该 Git 清单的摘要;启动时可查询来源 `source: bundled` 和版本,每次执行继续核对全部文件摘要并复制到受限只读工具目录。
`LICENSE.txt`、`licenses/**`、`THIRD_PARTY_NOTICES.txt`、`SOURCES.json` 和 `package-versions.txt` 随资源一起打包。保留这些材料不等于已验收公开再分发时的全部源码提供义务;对应源码及构建材料的实际交付和发布许可检查仍属于 A16 发布验收。本轮只生成本地验证包,没有对外发布,也不据此宣称 YCode 的许可证结论。
## 默认行为及高级覆盖
1. 未导入替代 Git 时,直接读取应用内置资源,不创建用户 Git 注册项,不扫描宿主 PATH。
2. 维护者主动执行 `toolchain-add git` 后,使用该替代版本,并在状态中标注 `source: imported`。损坏的显式覆盖会报错,不能悄悄切换到内置版本。
3. 内置清单或文件缺失、被修改时,Git 执行被拒绝;不会回退到系统 Git。Git 单项失效也不会让普通 shell 命令改走宿主执行。
4. 网络、宿主配置/凭证、工作区过滤、审批和仓库持久化规则保持已有范围。当前没有宿主历史/索引导入、宿主 `.git` 写回或远程 Git 接入。
## 维护和构建
开发者首次准备源代码工作区时,运行一次明确的依赖供应命令:
```powershell
npm run sandbox:vendor-git
npm run build
```
也可以提供已经下载且摘要匹配的上游 ZIP,完全离线生成:
```powershell
npm run sandbox:vendor-git -- --archive "C:\Downloads\MinGit-2.56.0.2-64-bit.zip" --offline
```
该步骤是维护者准备安装包的构建步骤,不是最终用户注册 Git。普通构建只验证现有资源,不隐式下载。缺失或被篡改时,构建会明确失败。供应脚本先在生成目录完成校验,再替换目标资源;旧版本保留在 `.tmp/vendor-git-build-*` 中。更新上游版本时,需审查并更新锁文件的归档及清单摘要,再重跑离线复现和回归,不自动追随 latest。
验证入口为 `npm run test:sandbox:bundled-git`。设置 `YCODE_TEST_MINGIT_ARCHIVE` 可追加离线确定性重建检查;设置 `YCODE_TEST_BUNDLED_RESOURCES` 可直接验证打包后的 `resources/sandbox/win32-x64`,避免只验证源码目录。
## 验证范围
已完成空用户数据、空宿主 PATH 下的真实 AppContainer Git、跨命令提交、中文和空格安装路径、高级覆盖及损坏拒绝、资源/清单损坏、无系统回退、构建摘要检查、许可证/来源随包和离线可复现检查。真实生产 Electron/preload/main/OMP 测试移除了 Git 注册步骤,验证默认内置来源与实际运行版本一致,并保持聊天审批和持久化查询。
实际目录包使用本机已有的 Electron 37.10.3 构建,避免构建工具另行下载同版本 Electron;目录包测试只说明本地未签名资源布局和执行子集,不能替代 NSIS 安装、标准用户、升级/卸载、签名和公开发布验收。具体报告与资源/源码摘要汇总见 `.tmp/sandbox-bundled-git-validation.json`。
完整构建及类型检查通过,最终复核 5 组共 157 项通过:
| 专项 | 通过项 | 报告 |
| --- | --- | --- |
| 实际打包资源内置 Git / 离线复现 / 拒绝覆盖无关目录 | 21 | `.tmp/sandbox-bundled-git-kB0ET9/report.json` |
| Git 本地工作流(使用固定版本 2.56.0.windows.2) | 43 | `.tmp/sandbox-git-hKqvGy/report.json` |
| 生产 Electron/OMP,无 Git 注册步骤 | 31 | `.tmp/sandbox-app-8ou6LQ/report.json` |
| Node/Python 工具链及依赖 | 24 | `.tmp/sandbox-toolchain-h859sL/report.json` |
| 策略/授权 | 38 | `.tmp/sandbox-policy-iUnn9M/report.json` |
目录包位于 `.tmp/sandbox-bundled-git-package/win-unpacked`,最终打包日志为 `.tmp/sandbox-bundled-git-package.log`。构建命令使用 `electronDist=node_modules/electron/dist` 和专用输出目录;初次尝试由打包器下载 Electron 时网络超时,最终使用本机相同版本重新构建成功。包内 Git 的清单、46 个文件及所有许可证均与源资源一致;主应用和沙盒执行器的摘要也纳入汇总。没有改动用户生产策略/运行时注册或重启现有窗口。
### 0.7.0 供应增量
本记录的 0.4.0 统计保留历史口径;当前运行时清单已扩展为 82 文件/30,197,068 bytes,以覆盖 HTTPS、SSH、helpers 和完整 DLL closure。宿主 Git 导入/远程传输的工程验收不再由本文件单独代表,统一见[沙盒 Git 完整接入](沙盒Git完整接入-2026-10-18.md)与[验收矩阵](沙盒Git接入验收矩阵-2026-10-18.md)。