news 2026/9/10 14:47:20

GitHub CLI 如何用 --attach 在 Issue 或 PR 中上传本地图片与视频?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GitHub CLI 如何用 --attach 在 Issue 或 PR 中上传本地图片与视频?

GitHub CLI 如何用 --attach 在 Issue 或 PR 中上传本地图片与视频?

【免费下载链接】cliGitHub’s official command line tool项目地址: https://gitcode.com/GitHub_Trending/cli/cli

在排查问题时,你经常需要把本地截图或录屏直接放进 GitHub Issue / PR 的正文,而不是先手动传到别的图床再贴链接。GitHub CLI 的--attach标志可以完成这件事:它在创建或评论 Issue、PR 时把本地图片/视频上传到 GitHub,并把正文中引用的本地路径改写成上传后的远程资源地址;正文没有引用到的文件会被自动追加到正文末尾。

适用前提(以下各条不满足时命令会在打开编辑器之前就报错):

  • 登录凭证是 OAuth、personal access token 或 fine-grained PAT,其他凭证类型会报unsupported authentication type
  • 你对目标仓库有写权限(WRITE / MAINTAIN / ADMIN 之一),只读权限会报attaching files requires write access to the repository
  • 目标是 GitHub.com 上的仓库。--attach在 GitHub Enterprise Server 上不受支持,会报attaching files is not supported on GitHub Enterprise Server

哪些命令支持 --attach

--attach注册在 Issue 与 PR 的创建、评论和编辑命令上,包括:

  • gh issue create
  • gh issue comment
  • gh issue edit
  • gh pr create
  • gh pr comment

两个已知的不兼容组合:gh issue create使用--web时、gh pr create使用--dry-run时都不支持--attach,同时传会直接报错。

基本用法

--attach可重复使用,单个文件的基本写法是:

# 附带一张截图,# 后面是图片的 alt 文本 $ gh issue comment 12 --attach './login.png#The login error state' # 重复该标志一次附带多个文件 $ gh issue comment 12 --attach ./before.png --attach ./after.png

创建 Issue 或 PR 时同理:

$ gh issue create --attach './login.png#The login error state' $ gh issue create --attach ./before.png --attach ./after.png

几个使用规则:

  • 格式为<file>#<image alt text>,其中 alt 文本只适用于图片。不写#部分时,图片以文件名作为 alt 文本(去掉扩展名、剩余的点号替换为空格);视频没有 alt 文本,写成视频会报cannot set alt text on video
  • 每条命令最多接受 50 个--attach值,超出会报--attach` accepts at most 50 values per command
  • 空路径(如--attach "")报cannot attach an empty path; --attach needs a file path-这类标准输入不被接受。
  • 同一个文件用两种写法传两次会报attached files must be unique
  • gh issue edit不带 body 相关标志时,issue 保留已有正文,附件追加到正文末尾。
  • gh issue comment/gh pr comment在没有通过标志提供正文和附件时,会交互式提示输入评论内容。

支持的文件类型与大小限制

--attach按扩展名判断文件类型,接受的类型如下(不区分大小写):

类型扩展名客户端大小上限
图片png、jpg、jpeg、gif、webp、svg10 MB
视频mp4、mov、webm100 MB

超出上限会报...: images must be at most 10 MB这类错误。注意视频一栏的 100 MB 只是客户端的宽松边界:真实限制取决于账户套餐,gh 在发请求前无法得知,所以更小的请求也可能被服务端拒绝。

其他在上传前就会被拒绝的情况:

  • 文件不存在,或路径是目录(... is a directory);
  • 不是普通文件(如命名管道,... is not a regular file);
  • 零字节文件(... is empty,空文件上传后也无法正常渲染);
  • 扩展名不在支持列表中,报... is not a supported file type (supported: png, jpg, jpeg, gif, webp, svg, mp4, mov, webm)

正文中的 Markdown 如何被改写

上传成功后,CLI 会处理正文里的 Markdown 引用:

  • 如果正文已经引用了某个附件文件,例如alt,该引用会被改写成上传后返回的资源 URL,原来写的 alt 文本保持不变;
  • 正文没有引用到的附件会被追加到正文(或评论)末尾:图片以alt的形式追加;视频没有 Markdown 的播放器语法,GitHub 只会在一个段落的完整内容是一个裸 URL 时把它渲染为播放器,所以视频以裸 URL 单独成段追加;
  • 代码围栏(``` fence)和行内代码(`跨度)里的路径不会被改写;
  • 参考式链接(reference-style link)会在其定义行处改写,一次编辑覆盖该标签的所有使用处;
  • 视频不能用参考式图片的方式内嵌,会报cannot embed a video as a reference-style image: ...

路径匹配按绝对路径进行,因此正文里写的相对路径(如./login.png)也能对上。

上传失败与不可撤销

上传按--attach给出的顺序进行,遇到第一个失败就停止,后面的文件不再尝试。即使部分成功、部分失败,Issue / PR 仍会用上传成功的那部分创建或更新:比如gh issue edit的帮助文案明确说明,此时命令以非零状态退出,但被编辑的 issue URL 仍会打印到 stdout。

需要特别注意的一点:上传无法撤销,也没有删除已上传资源的接口。所以 CLI 会在有文件成功上传时坚持把改写后的正文写进目标资源,避免出现“文件已上传但正文没有引用”的孤儿资源。

服务端返回错误时的提示信息:

  • 404:could not upload <file>: attaching files requires write access to the repository(端点对无写权限的 token 返回 404 而不是 403,不要按状态码误判为“资源不存在”);
  • 422:could not upload <file>: <服务端返回的 message>
  • 429:could not upload <file>: rate limited; retry after N seconds(无 Retry-After 头时为rate limited; wait and try again)。

结果验证

运行命令后按以下两点确认:

  1. 命令打印出新建/更新后的 Issue 或 PR URL(部分失败时退出码非零,但 URL 仍会输出),打开该 URL 检查正文;
  2. 正文中的本地路径引用已变成远程资源地址。测试代码里对上传端点返回的示例 URL 形如https://github.com/user-attachments/assets/AAA(测试桩数据,仅展示 URL 形态),实际地址以端点返回为准;没有引用的附件应出现在正文末尾。

如果验证时发现正文仍是本地路径,说明该引用没有被改写——先检查正文里的路径写法是否与--attach传入的路径指向同一文件(按绝对路径匹配),再确认该路径没有写在代码围栏或行内代码里。

相关源码位置

  • 标志解析与校验:internal/attachments/flags.go
  • 文件类型、大小限制与错误信息:internal/attachments/userasset.go
  • 上传请求、凭证与权限检查:internal/attachments/client.go
  • Markdown 引用改写逻辑:internal/attachments/references.go、internal/attachments/attach.go

【免费下载链接】cliGitHub’s official command line tool项目地址: https://gitcode.com/GitHub_Trending/cli/cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 14:47:06

comprehensive-rust 控制流精讲:深入理解 Rust 的 `loop` 无限循环

comprehensive-rust 控制流精讲&#xff1a;深入理解 Rust 的 loop 无限循环 【免费下载链接】comprehensive-rust This is the Rust course used by the Android team at Google. It provides you the material to quickly teach Rust. 项目地址: https://gitcode.com/GitHu…

作者头像 李华
网站建设 2026/9/10 14:43:06

毕业季论文降重工具测评与实战技巧

1. 毕业季论文降重实战指南又到一年毕业季&#xff0c;论文查重成了让无数学生头疼的问题。最近我帮学弟学妹们测试了市面上主流的AI降重工具&#xff0c;发现一个惊人的事实&#xff1a;直接用AI生成的论文查重率普遍在90%以上&#xff0c;而经过专业工具处理后的论文可以降到…

作者头像 李华