先认清改动发生在哪一层

通用说明:下表按处理环节归类,不是对具体方案的评价。选项改变什么,与实际拿到的内容由谁提供,是不同问题。

做法 做了什么 谁参与其中 阅读时留意什么
缩减克隆范围 减少先取回的历史或对象 仓库与 Git 后续工作是否还需要缺失内容
第三方转发 让请求或文件经过其他接收方 额外的中间方 内容来源及其所处角色
调整解析 改变名称查询或固定对应关系 本机与解析环节 这是解析问题,不是克隆选项
配置程序代理 改变程序请求使用的转发设置 程序与代理 配置影响哪些请求
更换连接方式 使用另一种仓库连接协议 仓库与连接程序 连通与传输表现不要混看

hosts 和 DNS 属于解析层面的思路,原理与风险另有说明;查询概念可读 名称查询经过哪些环节。这里继续区分下载范围、文件类型和转发结构。

克隆选项决定先取回多少内容

写这一页时(2026-10-30),Git 的克隆文档列有浅克隆、部分克隆、单分支与稀疏检出。它们不是同义词,缩减的对象也不同。

文档选项 作用
–depth 将提交历史截到指定范围,默认也隐含单分支
–single-branch 仅取通向某个分支末端的历史,后续获取也跟踪该分支
–filter 让服务器只提供符合过滤条件的部分对象
–sparse 工作区起初只检出一部分内容,可再扩展

GitHub 于 2020-12-21 发布、2021-04-28 更新的博客区分了这些做法。博客还提醒,浅克隆可能限制可用命令;部分克隆的代价则是用到缺失内容时需要联网。

少取历史、稍后补取对象与只检出部分工作区,改变的是不同范围,不是一个共同的结果承诺。

发布资产与源码压缩包分别看

Release 是基于 Git 标签组织的发布记录,标签用于指向历史中的某个位置。上传到这次发布的文件称为资产,GitHub 还会自动附上标签对应源码的压缩下载项。

源码包是收到请求后才生成的内容,会暂存一段时间,随后删除。它和预先上传的发布资产,生成方式并不相同。

  • 按同一个提交编号生成源码包,在提交仍存在且仓库名称未变的条件下,文件内容保持相同。
  • 分支或标签可以移动,所以相同名称后来可能对应另一份内容。
  • 压缩设置也可能调整,解压内容不变,外层压缩文件的字节却可能变化。

校验要连同对照来源一起理解

写这一页时(2026-10-30),读到的 2025-06-03 变更记录称,上传的 Release 资产会自动计算并显示 SHA-256 摘要。摘要是由文件内容计算出的校验信息,用于对照文件是否改变。

GitHub Docs 还介绍发布资产核验工具,可判断本地文件是否与特定资产一致。按请求生成的源码压缩包不在该项工具的适用范围内。

核对信息 能帮助分清什么
资产摘要 文件是否与对应发布资产一致
构建来源声明 软件来自何处、怎样构建,并带有签名信息
Git 的内容校验信息 对象内容是否与引用它的校验值对应

构建来源声明是构建方签署的来源与完整性信息。通用说明:证明来自某次构建,不等于已经证明软件没有恶意行为,来源和行为不是同一个判断。

Git 的书也说明内容存储前会计算校验信息。通用说明:若整个仓库连同提交一起被改过,拿到的校验值也可能属于那份修改后的内容;值能对应上,不代表它就是原作者公布的那一个。

对照值来自谁,同样属于核对内容;不能用文件自己带来的值替代原始发布信息。

转发方不都扮演同一种角色

按这些定义对照来看,据此推论:若网关本身是加密连接的接收端,它能读取自己接收的内容。这个推论有具体角色前提,不能直接用于所有带有转发环节的连接。

通用说明中的可能风险包括:

  • 难以了解内容由谁保存,以及保存多久。
  • 文件可能与原始发布内容不同,却未得到对照。
  • 中间方可能看到请求涉及的仓库和文件。
  • 转发内容可能同步滞后,或后来无法取得。
  • 若把令牌或密码附进转发请求,访问凭据可能随之交给中间方。

这些是可能的风险,不是某个对象已经发生事件的记录。写这一页时(2026-10-30),没有读到 GitHub 官方对此类转发站的专门说明,不能代替官方表达认可或反对。相关名词可继续读 网络请求与转发的术语说明,名称相似不表示它们拥有相同的处理权限。

程序代理和前缀改写各有范围

Git 文档中的 http.proxy 用来覆盖请求的代理设置。curl 手册也列有 –proxy 指定代理、–noproxy 指定直连主机的选项,环境变量 NO_PROXY 则用于不经代理的主机清单。

  • insteadOf 是另一类改写机制,可抽象为把前缀 A 换成前缀 B;有多个匹配时,较长匹配优先。这里改变的是请求目标的前缀,不等同于设置一个转发连接。

通用风险:前缀指向谁,后续匹配的仓库请求就可能向谁取得内容。若按全局范围保存,之后符合此前缀的请求还会受到影响,不能把它当成只作用于眼前一次的变化。

HTTPS 是通过加密连接传递请求的协议,SSH 则是一种远程连接协议。GitHub Docs 另有 SSH 经 HTTPS 端口连接的说明,处理的是连通情形,并非传输表现的承诺。完全打不开的情况另有一篇“GitHub 打不开”单独说明,需与下载过程缓慢分开阅读。