6.1 KiB
YCode 内置 Git 分发(2026-10-18)
组件 0.4.0 / protocol 1 已将 Git 改为应用默认携带。普通用户不需要在电脑上安装 Git,也不需要执行 toolchain-add git。工具使用 runtimes: ['git'] 选择内置运行时,首次使用会按已有仓库规则生成沙盒专用基线。
固定来源和文件
当前固定版本为 Git for Windows 2.56.0.windows.2,来源为官方 MinGit 发布。上游 ZIP 为 MinGit-2.56.0.2-64-bit.zip,39,806,486 字节,GitHub release asset 的 SHA-256 与下载实测一致:
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 的许可证结论。
默认行为及高级覆盖
- 未导入替代 Git 时,直接读取应用内置资源,不创建用户 Git 注册项,不扫描宿主 PATH。
- 维护者主动执行
toolchain-add git后,使用该替代版本,并在状态中标注source: imported。损坏的显式覆盖会报错,不能悄悄切换到内置版本。 - 内置清单或文件缺失、被修改时,Git 执行被拒绝;不会回退到系统 Git。Git 单项失效也不会让普通 shell 命令改走宿主执行。
- 网络、宿主配置/凭证、工作区过滤、审批和仓库持久化规则保持已有范围。当前没有宿主历史/索引导入、宿主
.git写回或远程 Git 接入。
维护和构建
开发者首次准备源代码工作区时,运行一次明确的依赖供应命令:
npm run sandbox:vendor-git
npm run build
也可以提供已经下载且摘要匹配的上游 ZIP,完全离线生成:
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 完整接入与验收矩阵。