git のコミットメッセージはどこまで大きくできるのか

-- Views

August 03, 26

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

git のコミットメッセージは どこまで大きくできるのか 2026.08.01 risou 1

3.

Gitプロジェクトのコミットメッセージ指針 area: short summary problem / motivation approach discarded alternatives 一行目は短い要約 一行空けて、コミットの詳細を書く これはGitの推奨であり、構文制約ではない 3

4.

コミットメッセージに上限はない Gitは固定の文字数・byte数上限を 仕様として定めていない 4

5.

ということは、どんなに長い文章も入る 5

6.

本当に? 6

7.

いろいろ調べてみた 7

8.

コミットの「サイズ」 同じコミットでも、数える層が異なる raw commit object(⾮圧縮) Gitのヘッダー tree / parent / author / committer / 空行 メッセージサイズには含まれない commit message(UTF-8 bytes) subject + 改⾏ + body。ここだけがメッセージサイズ。 feat: cache search results loose object 全体を圧縮 zlib(raw commit object) .git/objects にある単体の保存形 packfile pack(raw commit object, ...) push / clone / repack の保存・転送形 Store query results for 60 seconds. This reduces repeated database reads. payload API / Actions / Webhookが組み⽴てるJSON 8

9.

いろんなコミットで試す long subject:一行をとっても長く repeat body:本文繰り返し(高圧縮のときの挙動) Base64 body:本文を ase64に(低圧縮のときの挙動) japanese body:UTF-8 byte数での評価 9

10.

何が変わる? 同じ100 MBでもpackは約261倍違う Raw message, commit object, and pack size macOS arm64 / Git 2.55.0 / generated 2026-08-01 1 MiB s (log scale) 1 KiB base64 1 MiB message base64 10 MiB commit object base64 100 MiB pack repeated 1 MiB repeated 10 MiB repeated 100 MiB 10

11.

圧縮率は通信に影響する 25 MB message pack push clone repeat body 74.8 KB 2.874秒 3.571秒 Base64 body 19.0 MB 7.388秒 7.437秒 push先はGitHub 11

12.

Git 2.55.0で2 GBを越えてみた repeat body raw commit object 約2.001 GB commit-tree成功、9.784秒 約2.001 GB header込み(+276 B) 2,148,532,224 B 2,148,532,500 B maximum resident set size:約4.15 GB git cat-file :全文読出し成功 / git fsck :成功 12

13.

packfileでも2 GBを越えてみた Base64本文 packfile 約2.750 GB commit作成:74秒台 約2.092 GB pack作成:88.406秒 2,952,790,016 B 2,246,133,494 B 13

14.

サイズが大きくなると さすがに一定のタイミングで遅くなる Git operation time by commit-message size macOS arm64 / Git 2.55.0 / generated 2026-08-01 git / cat_file_read / base64_body git / cat_file_read / repeated_body git / commit_tree / base64_body git / commit_tree / repeated_body git / repack / base64_body git / repack / repeated_body 30 s )elacs gol( sdnoces despalE 5s 1s 1 KiB 1 MiB 10 MiB Commit message bytes (log scale) 100 MiB 1 GiB 14

15.

クライアントごとに、困り始める場所が違う Vim 9.1 : 8 GBで open 12.002秒、末尾移動 13.688秒、save 20.356秒 Neovim 0.12.4 : 8 GBで open 9.540秒、末尾移動 7.045秒、save 19.258秒 lazygit 0.63.1 : 84.1 MBで末尾到達 25.706秒。100 MBでは30秒以内に末尾へ到 達できず IntelliJ IDEA : 100 MBでも一覧と詳細先頭を表示。ただし全文表示できず 15

16.

JetBrainsは全文表示を制限する MAX_COMMIT_MESSAGE_LENGTH = 50000 MAX_COMMIT_MESSAGE_LINES = 3000 50,000文字 または 3,000行 保存上限ではなく、commit detailの表示上限 16

18.

GitHubはどうか 18

19.

コミット詳細ページの限界 65,535 B message本文:全文表示 → 超過すると末尾を切り詰め 19

20.

GitHub Actionsの限界 65,535 B push eventのhead_commit.message:超過すると先頭65,535 B + "…" 20

21.

10 MBの壁 raw object push / clone / fetch REST API Actions Web UI 10 MB 成功 成功 起動 表示(本文は65,535 Bで切り詰め) 10 MB + 1 B 成功 失敗 runなし 404 Git transportには存在し、GitHubのアプリケーション層から参照できない。 21

22.

50 MBを超えるとpushできない 52,428,800 B 52,428,801 B pack 152,841 B pack 152,841 B push成功 push拒否 non-blob object size limit exceeded 22

23.

GitHubの各境界を整理する 対象 境界 結果 Git push raw 50 MB 拒否 REST Git Commit API raw 10 MB 404 または 422 Web UI message 65,535 B / raw 10 MB 本文切り詰め / commitページ404 Actions push event raw 10 MB / message 65,535 B runなし / 65,535 Bまで保持、超過で … 付き65,538 B Webhook payload 25 MB 公式が説明する上限(未計測) 23

24.

他のサービス こちらは実際に検証したわけではないです service GitHub GitLab Bitbucket Cloud Codeberg 保存・push 表示・API event / webhook raw 50 MB + 1 B detailは65,536 Bから切り詰め。raw Actions messageは65,536 Bから切 で拒否 10 MB + 1 BでREST/UI不可 り詰め / Webhookは 25 MB messageは任意 title 1 KB、description 1 MB 25 MB 長 不明 不明 256 KB 不明 不明 不明 ここを調べる時間が取れませんでした……(謝罪) 24

25.

様々な限界 50,000文字 / 3,000行 JetBrainsの表示上限 65,535 bytes Actions push eventが完全に保持するmessageの上限 10 MB raw GitHubアプリケーション層の境界 50 MB raw GitHub transportの境界 2 GB超 Git 2.55.0で保存できた範囲 25

26.

実運用でどこまで攻めるか 自分で書く文には 10 MB までいけそう Actions? その環境で日本語20,000文字いります? 安全側に倒すなら日本語20,000〜30,000文字くらいか というわけで、 plan のサイズ(文字数)が相当じゃなければ全然イケる ちなみに自分の plan は120,000文字とかのものもあって、commit message に 入れると GitHub や JetBrains には切り捨てられそう 26