You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git归档中展开%(describe)为何存在拒绝服务(DoS)风险?

Git归档中%(describe)占位符的拒绝服务防护说明

相关手册内容

gitattributes手册

创建归档

export-subst
如果为文件设置了export-subst属性,Git在将该文件添加到归档时会展开多个占位符。这些占位符与git log的--pretty=format:选项所用占位符相同,但在文件中需以$Format:PLACEHOLDERS$的形式包裹。例如,字符串$Format:%H$会被替换为提交哈希。不过,每个归档仅展开一个%(describe)占位符,以避免拒绝服务攻击。

git log手册

美观格式

[...]

  • format:<format-string>
    [...]
    占位符包括:
    [...]
    • 从提交中提取信息的占位符:
      [...]
      %(describe[:options])
      人类可读名称,类似git describe;无法描述的提交则为空字符串。描述字符串后可跟冒号及零个或多个逗号分隔的选项。添加或移除标签时,描述可能不一致。

问题解答

这个拒绝服务防护针对的是自动化场景下的服务端或批量处理系统,而非手动执行git archive的普通用户:

  • 比如持续集成(CI)系统中,若批量处理大量仓库归档时,某仓库文件包含上百个%(describe)占位符,每个都要触发全历史扫描找标签,会瞬间耗尽CI节点的CPU、IO资源,导致节点无法处理其他任务,甚至整个集群瘫痪。
  • 再比如Git托管平台,当用户请求生成归档时,若仓库里有大量这类占位符,服务端会被大量耗时的git describe操作占满,无法响应其他用户请求,这就构成了对服务端的拒绝服务。

手动执行时你可以随时按^C终止,但自动化系统没有人工干预的余地,这个限制就是为了防止恶意设置或疏忽导致的资源耗尽问题。

内容的提问来源于stack exchange,提问作者figl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:54:27