文档目录

GitHub 安装源标准

把公开 GitHub 仓库当作安装源时,仓库需要满足的清单与结构要求,以及地址与分支的写法。

最后更新 2026年11月1日

「下载管理」除了创意工坊,还可以直接从公开的 GitHub 仓库取回作品。仓库本身就是作品包:客户端读仓库根目录的 package.json,按这份清单校验,再把该提交的源码归档下载下来。作者不需要另外打 release、也不需要上传 zip 资产。

本页是这类仓库需要满足的约定。玩家侧的操作步骤见下载管理,清单字段见星际枢纽压缩包标准。

客户端做的事

点「检查并下载」后,应用按四步取回内容:

  1. 用「仓库地址」与「分支」向 GitHub 查询该引用的提交号,并固定在这个提交上。
  2. 读取该提交根目录的 package.json(上限 128 KiB),按星际枢纽标准校验,并要求 version 是完整的语义化版本。
  3. 校验通过后显示预览(名称、简介、作者、版本、类型、战役、SCNID 等清单里有的字段),确认后才开始下载。
  4. 下载该提交的源码归档,落到下载目录,显示为「已完成」;随后由玩家点「安装」进入正常的安装流程。

关键点是提交号固定:预览时就把分支解析成具体提交并记录下来,下载用的还是这个提交,所以检查之后作者再往分支推新提交,也不会影响本次下载取到的内容。想要拿到新版本,重新建一次任务即可。

仓库要满足什么

要求说明
仓库公开不读私有仓库,也不需要登录;接口地址固定为 github.com、api.github.com、raw.githubusercontent.com、codeload.github.com
根目录有 package.json只能是仓库根目录,不能放进子文件夹;一个仓库只能有一个作品
清单符合标准字段、类型、资源路径按星际枢纽压缩包标准校验
版本号完整必须是 1.2.3 这类完整语义化版本,1.2、v1.2.3、最新版 都不行
资源真实存在清单里 maps[]、mods[] 声明的每个 source_path,都必须能在仓库里找到文件或组件目录
归档结构简单GitHub 打出的归档只有一层 <仓库名>-<提交号>/ 目录,作品文件就在这一层里,不能嵌套多层外壳

实际含义很直接:仓库根目录就是作品包的根目录。把 Maps/、Mods/、package.json 直接放在仓库根下即可;为了好看再套一层 src/ 或 pack/ 目录会被判为清单不在根部。

仓库里可以放手稿、构建脚本、README.md 这类与安装无关的文件:它们会随归档一起下载,但只有清单声明的资源与附件会被安装。

地址与分支怎么写

「仓库地址」必须是这种形式:

https://github.com/所有者/仓库
  • 只接受 https://,不接受 http://,也不接受网页里的分支路径(/tree/main)或文件路径。
  • 结尾带不带 / 都可以;写成 .git 结尾会自动去掉。
  • 所有者只能是字母、数字与 -,且以字母或数字开头;仓库名可用字母、数字与 _ . -,但不能是 .、.. 或单独的 .git。
  • 不支持 GitHub Enterprise 或其他托管平台——地址前缀固定为 github.com。

「分支」可以填分支名、标签或提交号,默认 main:

可以写不能写
main、release/1.x、v1.2.0、完整的 40 位提交号以 / 开头或结尾、含 .. 或 @{、含空白与 ~ ^ : ? * [ \、含控制字符

每一段路径还不能以 . 开头、不能以 . 或 .lock 结尾。填错时窗口会即时提示「请输入 https://github.com/所有者/仓库 格式的地址」或「请输入分支名称」。

体积与结构

GitHub 安装源不设自己的体积门槛:既没有「归档文件最大多少 MB」,也不受创意工坊的创作者额度约束。只要仓库推得上去、归档打得出来,客户端就照单取回;真正限制规模的是 GitHub 对单个文件与仓库体积的规则,那与我们无关,也不在我们的检查范围内。

会被拒绝的只有结构问题。解压前,客户端会把归档的条目过一遍,这些判断与作品大小无关,只用来挡掉无法安全解压的包:

  • 路径里出现绝对路径、盘符、..,或 Windows 保留名(con、aux、com1 等)。
  • 两个文件只差大小写,解到 Windows 上会互相覆盖。
  • 单条路径层级过深,或归档条目数量极多——这类包多半是打包工具出了错。
  • 解压后总量远超合理范围(防止压缩炸弹的硬线),正常战役与模组不会触及。

命中时窗口给的是「压缩包结构不安全」一类提示,按正常的目录层级重新打包即可。清单本身的读取上限是独立的一条:根目录 package.json 不能超过 128 KiB,正常清单只有几 KB。

需要控制分发体积时,通常不是为了过检查,而是为了玩家下载体验:把模组拆成独立的依赖包,在 dependencies 里声明,让安装器先装上游。

常见失败与原因

现象可能原因
提示「无法创建下载任务」,并要求检查仓库是否公开、分支是否存在、根目录 package.json 是否符合标准仓库私有或已删除;分支、标签、提交号写错;根目录没有清单;清单字段不合法;版本号不是完整语义化版本
预览里缺字段清单能读,但 name、description、author、version 等字段本身没写
任务失败且提示资源缺失清单声明的 .SC2Map / .SC2Mod 不在仓库里,或大小写、相对路径写错
提示清单不在根目录作品被放进了子文件夹,或仓库里同时存在多份 package.json
提示清单在检查后发生变化极少数情况下 GitHub 返回的内容与固定提交不一致,重新建一次任务即可

与创意工坊的分工

GitHub 安装源是分发通道,不是发布渠道:它不经过审核、没有版本记录,也不产生作品编号。要让作品出现在创意工坊、能被按 SCNID 下载,仍然要在创作者中心创建作品并上传版本。

两者可以并存:仓库持续开发,稳定版本再上传到工坊。仓库里的 scnid 字段填该项目实际分配的编号,客户端不会因为这个字段就把仓库内容当成工坊作品。