Gitのコミットはどれくらいの大きさになるのか?
How big is a Git commit?
Gitはオブジェクトをzlibで圧縮し、さらにpackfileで効率化するため、コミットのサイズはファイルの圧縮率とツリー構造に依存する。実験では、空のリポジトリが約64KB、250個の小さなファイルのコミットで約47KB、3バイトの変更で約17KB、単一ファイルのリポジトリでは約8KB、580KBのバイナリファイルで約300KB、16.4MBのソースファイルで約1.6MBだった。小さなコミットではキロバイト単位のオーバーヘッドが発生するが、大きなコミットでは非圧縮ファイルの50%から10%程度に収まり、非常に効率的である。
つまり、3バイトの変更をリポジトリに保存するのに17KBもかかっているのだ。
HNでの議論
30- cocoto
> duのオプションは、sが要約、bがバイト表示だ。
小さな指摘だが、ロングオプションを使えば、コードサンプルが自己説明的になるよ!
- nathanpankon
ワークフローに合わせて合理化したGitの代替を作って遊んでみた。完全に諦めたわけではないけど、中心となるアイデアは、astパスを使ってデータをさらに圧縮できるというものだった。
君が言うようにGitは本当に効率的で、chromiumの作業(の混乱)や、バージョン間の修正を完全なリビルドなしで行うために深くハックした経験から、いくつか批判的な目で臨んだのだけど、
圧縮の代替手段としては、自分のアプローチは価値がないという結論に至った。Gitの方が上手くやってくれた!
とにかく、その試みはこちら: https://github.com/pankon/gat
- jamesblonde
Gitはローカルファイルストレージに関する前提で設計されているため、分散ファイルシステムにデータを保存する際には課題となる。我々は分散ファイルシステムHopsFSを構築し、データをS3に保存した。FUSEで高性能なgitをサポートするために、書き込みはリモートNVMeディスクにヒットし、非同期でS3に同期される(NVMe上でレプリケートするか、単に障害復旧を行うことができる)。以前はリモートNVMeディスクをライトスルーキャッシュとして使っていたが、それはgitでは機能しない。S3のレイテンシが高すぎるのだ。
- lucasoshiro
Gitの新しいバージョンでは、新しいコマンド `git repo structure` を使ってこれを確認できる[1]
[1] https://git-scm.com/docs/git-repo#Documentation/git-repo.txt...
- CodesInChaos
Gitはdeflateよりも優れた圧縮アルゴリズム、例えばzstdやbrotliをサポートしているのか?