web-dev-qa-db-ja.com

git lfsの利点は何ですか?

Githubには、大きなファイルをプッシュする際に limit があります。したがって、大きなファイルをリポジトリにプッシュする場合は、 Git LFS を使用する必要があります。

Git repoにバイナリファイルを追加するのは悪い考えです。しかし、サーバーで gitlab を使用していて、リポジトリ内のファイルサイズに制限がなく、サーバー上でリポジトリサイズが非常に大きくても問題ありません。この状態で、git lfsの利点は何ですか?git cloneまたはgit checkoutは速くなりますか?

38
Sanster

集中型システムと比較したGit(およびその他の分散システム)の特徴の1つは、各リポジトリにプロジェクトの履歴全体が含まれていることです。 100 Mbのファイルを作成し、十分に圧縮されない方法で100回変更するとします。最終的には10 Gbのリポジトリになります。つまり、各クローンは10 Gbのデータをダウンロードし、クローンを作成する各マシンで10 Gbのディスク容量を消費します。さらにイライラするのは、大きなファイルをgit rmした場合でも、これらの10 GBのデータをダウンロードする必要があることです。

大きなファイルをgit-lfsのような別のシステムに置くと、ファイルの各バージョンへのポインタのみをリポジトリに保存できるため、各クローンは各リビジョンの小さなデータのみをダウンロードします。チェックアウトでは、使用中のバージョン(上記の例では100 Mb)のみがダウンロードされます。その結果、サーバーのディスク領域を使用することになりますが、クライアントの帯域幅とディスク領域を大幅に節約できます。

これに加えて、git gc(内部的にはgit repack)が使用するアルゴリズムは、大きなファイルでは常にうまく機能するとは限りません。最近のバージョンのGitはこの領域で進歩を遂げ、かなりうまく機能するはずですが、大きなファイルを含む大きなリポジトリを使用すると、最終的に問題が発生する可能性があります(RAMリポジトリ)。

68
Matthieu Moy