個人用メモです。 「git gcってあんまし容量減らないよなぁ」 と思ったのが動機です。調べたけどパッと腑に落ちる記事がなかったので「自分で git のソースコード見た方がいいな」と急にモチベ発動してグワっと勉強しました。またついでに歴史改変の方法も調べたのですが、公式で既に WARNING が出てるほど非推奨化されてるfilter-branchを使用してる記事が多かったので、2021 年現在で多分一番推奨されてるfilter-repoを使ってやる方法もまとめました。 ちなみに容量減らしても高速化するかというとそこまで単純ではないです。そもそも減らさなくても partial clone で blob オブジェクトを必要最低限に指定して昔の blob をデフォルトで持ってこないようにしたり(--no-checkoutと併用するとより効果有る)、その後本当に自分が必要なやつだけ sparse-
![git gc の仕組みを原理から理解してサイズを 136MB → 7.2MB(95%減)まで削減した時の勉強メモ](https://cdn-ak-scissors.b.st-hatena.com/image/square/867cb23f7e8bd7f18f06a03f678230faed5b1642/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--o6CGu6th--%2Fco_rgb%3A222%252Cg_south_west%252Cl_text%3Anotosansjp-medium.otf_37_bold%3Aulwlu%252Cx_203%252Cy_98%2Fc_fit%252Cco_rgb%3A222%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_60_bold%3Agit%252520gc%252520%2525E3%252581%2525AE%2525E4%2525BB%252595%2525E7%2525B5%252584%2525E3%252581%2525BF%2525E3%252582%252592%2525E5%25258E%25259F%2525E7%252590%252586%2525E3%252581%25258B%2525E3%252582%252589%2525E7%252590%252586%2525E8%2525A7%2525A3%2525E3%252581%252597%2525E3%252581%2525A6%2525E3%252582%2525B5%2525E3%252582%2525A4%2525E3%252582%2525BA%2525E3%252582%252592%252520136MB%252520%2525E2%252586%252592%2525207.2MB%25252895%252525%2525E6%2525B8%25259B%252529%2525E3%252581%2525BE%2525E3%252581%2525A7%2525E5%252589%25258A%2525E6%2525B8%25259B%2525E3%252581%252597%2525E3%252581%25259F%2525E6%252599%252582%2525E3%252581%2525AE%2525E5%25258B%252589%2525E5%2525BC%2525B7%2525E3%252583%2525A1%2525E3%252583%2525A2%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vemVubi9pbWFnZS9mZXRjaC9zLS1GVE1QdlRqZS0tL2NfbGltaXQlMkNmX2F1dG8lMkNmbF9wcm9ncmVzc2l2ZSUyQ3FfYXV0byUyQ3dfNzAvaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2NhYzk2MWY2ODkuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_72%2Fv1627274783%2Fdefault%2Fog-base_z4sxah.png)