🐱

【Git】Git LFSを使用したリポジトリが肥大化した場合に使いたい「git lfs prune」

2020/09/25に公開

最初に

どうも、ろっさむです。

本記事は業務の中でGit LFSを用いた巨大リポジトリを運用した際に、できるだけローカルPCのディスク領域を節約するため使用したコマンド「git lfs prune」について調査し、まとめたものとなります。間違いや、より効率的なやり方などあればご指摘頂けると助かります。

GitLFSについては以下の記事が参考になります。
Git LFS をちょっと詳しく

「git lfs」を使用した際に起きた問題点

3Dゲームなどのバイナリデータを非常に多く扱い、時間と共にデータも増えていくプロジェクトの場合はリポジトリが肥大化しやすく、Git LFSを用いても半年ほど経てばリポジトリ下の .git/lfs/objects というディレクトリがディスク領域を逼迫します。このディレクトリには参照されたLFSのローカルコピーがどんどん溜まっていくため、古いファイルや使用していないファイルも、ディレクトリサイズを増やす原因となります。

ちなみに、業務内での経験談としてはこのディレクトリだけで600GBありました。これではいくら増設してもきりがありません。

「git lfs prune」とは

このコマンドは、古いLFSファイルのローカルコピーを削除してディスク領域を解放するものです。ここでいう「古いLFSファイル」とは、最近のコミットやブランチなどから参照されておらず、現在は使用していないファイルのことを指します。reflogは考慮されません。
この「最近」の定義に関しては git lfs fetch--recent オプションで最近のオブジェクトをDLするために使用する lfs.fetchrecentrefsdays に設定されています。デフォルトの場合、7日間のうちに参照されたオブジェクトは「最近」である、という設定になっています。この日数+任意の日数が経過したファイルが削除対象となります。オフセットとなる日数の値を変更したい場合は lfs.pruneoffsetdays を変更する必要があります。変更方法は後述します。

使用方法

gitリポジトリにて以下のコマンドを打ち込んでください。

git lfs prune

もし、オフセットとなる日数を変更したい場合は以下のコマンドを打ち込んでください。

git config lfs.pruneoffsetdays 任意の日数の数字

例えば

git config lfs.pruneoffsetdays 7

とした場合は、 lfs.fetchrecentrefsdaysのデフォルト値である7日+7日で2週間参照されていないファイルが削除対象となります。 lfs.fetchrecentrefsdays を変更したい場合は以下のコマンドを打ち込んでください。

git config lfs.fetchrecentrefsdays 任意の日数の数字

以下のコマンドを打つと現在のlfsの設定一覧が表示されます。そちらで変更した項目の値が正しいことを確認してください。

git lfs env

または、以下のように設定項目名を打ち込むと、値が表示されますので、そちらでも確認が可能です。

git config lfs.pruneoffsetdays

参考

Discussion