GitHub:ファイルの中身が渡されなかった理由
あるコミットのファイルは GET /repos/持ち主/リポジトリ名/contents/パス?ref=コミット で読みます。Accept: application/vnd.github.raw+json を付けるとファイルそのものが、付けないと中身を base64 にした JSON が返ります。GitHub の文書が挙げる答えは 200・302・304・403・404 で、大きさによる上限もあります(2026年10月25日に確認)。
{"message": "This API returns blobs up to 1 MB in size. The requested blob is too large to fetch via the API, but you can use the Git Data API to request blobs up to 100 MB in size.", "errors": [{"resource": "Blob", "field": "data", "code": "too_large"}]}
大きさごと
- 1 MB 以下:GitHub の文書は、この入口の機能がすべて使えると書いています。
- 1〜100 MB:使えるのは raw と object のメディアタイプだけです。object では
contentが空で、encodingがnoneになります。ファイルを渡すのは raw です。既定の JSON では、公開の報告(2017年)が上の断りtoo_largeを引いています。この文は Git Data API を案内しています。 - 100 MB 超:文書は、この入口では扱わないと書いています。GitHub は 100 MiB を超えるファイルをリポジトリに入れさせず、50 MiB を超えると警告します。
- Git Data API(
GET /repos/持ち主/リポジトリ名/git/blobs/SHA)は 100 メガバイトまでの blob を扱い、application/vnd.github.raw+jsonで raw でも返します。
404 と、ファイルでない答え
- 404:そのパスがそのコミットに無いか(後で足された・消された・名前が変わった。古い名前は古いコミットにあります)、リポジトリがこのトークンからは見えません。トークンで見えない非公開のリポジトリにも、GitHub はこう答えます。
- ディレクトリは、中身の一覧で返ります(1,000 ファイルまで)。それより多いときは、文書は Git Trees API を案内しています。
- シンボリックリンクは、指す先がリポジトリのふつうのファイルなら、そのファイルの中身で返ります。そうでなければ、リンクそのものを表すオブジェクトで返ります。
- サブモジュールは、ファイルではなく、
submodule_git_urlとshaで別のリポジトリとそのコミットを示すオブジェクトで返ります。 - トークン:GitHub の権限の一覧では、この入口は Fine-grained のトークンの Contents の読み取りです。classic のトークンは、非公開リポジトリに
repoのスコープが要ります(足す権限へ)。
直し方
- 1 MB 超:
Accept: application/vnd.github.raw+jsonで頼むか、Git Data API で blob を読みます。 - プルリクにあるファイルなのに 404:名前が変わったファイルは古いコミットでは古い名前で読み、足された・消された側は読みません。
- たくさんのファイルやディレクトリまるごと:Git Trees API でツリーを読みます。
- 差分ぜんたいが大きすぎるなら:GitHub の差分の 406「too_large」へ。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。変わったファイルを IDE の差分ビューアで開き、両側を raw で読みます。左はマージ先のブランチとの分かれ目、右はプルリクの head です。足されたファイルは左が空、消されたファイルは右が空で、名前が変わったファイルは左を古い名前で読みます。あるはずの側の中身を GitHub がくれないとき(404 や、Git LFS のファイルのように別のホストへの転送)は、その側を空で出し、見出しに「出せません」と書くので、足された・消されたファイルには見えません。ほかの断りは、GitHub の文を添えて差分の窓に出します。受信箱・差分・会話は無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English