git lfs migrate
は、指定された大きなファイルがLFSに保持されるように、リポジトリの履歴を書き直したと思いました。これは、大きなファイルのすべてのバージョンが直接含まれているわけではないため、リポジトリが小さくなることを意味します。ただし、実行すると
git lfs migrate import --include="test-data/**" --include-ref=refs/heads/master
test-data/
ディレクトリ内のすべてのファイルは、次のようなファイルに置き換えられます。
version https://git-lfs.github.com/spec/v1
oid sha256:5853b5a2a95eaca53865df996aee1d911866f754e6089c2fe68875459f44dc55
size 19993296
そして、.gitフォルダーは2倍の大きさになります(400MBから800MB)。私は混乱しています。 git lfs migrate doing
とは
編集:私はしました 移行後にクリーン
git reflog expire --expire-unreachable=now --all
git gc --Prune=now
du
を実行する前。その後、ほとんどのスペースはこれらのフォルダーによって使用されます。
414M .git/objects 398M .git/lfs
唯一の問題は、バイナリファイルの元のgitオブジェクトが.git
フォルダーをガベージコレクションしていないためです。
git lfs移行チュートリアル に従ってください:
上記は、既存のgitオブジェクトをlfsオブジェクトに正常に変換します。ただし、通常のオブジェクトは.gitディレクトリに残ります。これらは最終的にgitによってクリーンアップされますが、すぐにクリーンアップするには、次のコマンドを実行します。
git reflog expire --expire-unreachable=now --all
git gc --Prune=now
実行後、.gitは同じサイズになるはずですが、それに入ると、objects
が移行前よりもはるかに小さくなり、残りのlfs
に残ります。 。
さらに良いニュースは、他の開発者/アプリケーションがリポジトリを複製するときに、objects
ディレクトリをダウンロードするだけで、only履歴全体ではなく、チェックアウトした「大容量ファイル」。
Git lfs migrateは、指定された大きなファイルがLFSに保持されるように、リポジトリの履歴を書き直したと思いました。
完全に真実です。
これは、大きなファイルのすべてのバージョンが直接含まれているわけではないため、リポジトリが小さくなることを意味します。
正確ではない。 git lfs
の約束は、リポジトリが小さくなることではありませんが、クローンを作成するときに、すべてのgitオブジェクトをダウンロードする必要がないため、クローンが小さくて高速になります。 git-lfs
が管理するファイルの場合、git checkout
の実行中に作業ディレクトリに表示されるはずのファイルのみがダウンロードされます。
Test-data /ディレクトリ内のすべてのファイルは、次のようなファイルに置き換えられます。
これがgit-lfsの仕組みです。リポジトリ内のファイルをコミットする代わりに、オブジェクトのIDを含むこの「ポインタ」ファイルをコミットします。ファイルの内容は.git/lfs/objects
フォルダーに保存されます。そして、これらのオブジェクトは、git Push
を実行するときにサーバーにアップロードされます。
そして、.gitフォルダーは2倍の大きさになります(400MBから800MB)。私は混乱しています。
Git lfsによって管理されるすべてのファイルがこのフォルダーに格納されるため、巨大になる可能性があります。現時点ではオブジェクトが2回保存されているため、リポジトリのサイズが2倍になると思います。 .git/objects
で、古い履歴を破棄するまで reflogをパージしてgit gc
を実行します。ただし、lfsの移行が確認できたら、成功)と.git/lfs/objects
では、git lfs変換を行ったためです。
(確かではありませんが).git/lfs/objects
はキャッシュフォルダーとして機能するので、新しい履歴をすべてプッシュし、lfsで管理されているファイルをアップロードしたら、削除してリポジトリのサイズを小さくすることができます。 しかし、私があなただったら、私はそれをしません!
ローカルリポジトリでのgit lfsの実際の効果を確認するには、--force
が新しい履歴をプッシュした後(および古い履歴がリモートリポジトリになくなった場合)、新しいクローンを作成します。そして今、あなたのローカルリポジトリはより小さくなければなりません。
ただし、これらのファイルの新しいバージョンがダウンロードされるたびに、フォルダー.git/lfs/objects
は今後も大きくなります(ただし、git lfsを使用しなかった場合より常に小さいはずです)。
それがどのように機能するかをもっとよく理解してほしい...
PS:
Test-data /ディレクトリ内のすべてのファイルは、次のようなファイルに置き換えられます。
あなたの言ったことの一部が間違っているといいのですが。 test-data/
のファイルにはまだ良いコンテンツが含まれていますが、報告するのはgit
コマンドが表示するものです...確認できますか?または、問題があります... git lfs
がインストールされていないことが原因と考えられます。