# 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)。