Git(および他の分散システム)の集中システムと比較して、各リポジトリにはプロジェクトの全履歴が含まれているという点があります。 100 Mbのファイルを作成し、それを100倍に圧縮し、圧縮しないとします。 10Gbのリポジトリになります。これは、各クローンが10 Gbのデータをダウンロードし、クローンを作成している各マシンで10 Gbのディスクスペースを使用することを意味します。さらにもっとイライラするのは、git rm
の大きなファイルがあっても、これらの10Gbのデータをダウンロードする必要があります。
大きなファイルをgit-lfsのような別のシステムに置くと、ファイルの各バージョンへのポインタだけをリポジトリに格納することができるため、各クローンは各リビジョンの小さなデータをダウンロードします。チェックアウトは、使用しているバージョン、つまり上記の例では100Mbのみをダウンロードします。その結果、サーバー上のディスク領域を使用することになりますが、クライアントには多くの帯域幅とディスク領域が必要になります。
さらに、git gc
(内部では、git repack
)によって使用されるアルゴリズムは、大きなファイルではうまく機能しません。最近のバージョンのGitはこの分野で進歩しましたが、うまくいくはずですが、大きなファイルを持つ大きなリポジトリを使用すると、最終的に問題が発生する可能性があります。
接続速度を比較しましたか? – SOFe
いいえ、私は原則それを理解しようとしています。 – Sanster
git-lfsを使うと、クローンがもっと早くなります。ちょっとチェックしてください。lfsに入れられたファイルをダウンロードする時間です。しかし、本当にバイナリをチェックインする必要がある場合は、lfsを使ってください。 – Philippe