2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git LFS 入門と落とし穴: 大きなファイルに悩まされないバージョン管理

Last updated at Posted at 2024-12-03

Gitは大きなファイルの取り扱いは苦手です。
リポジトリサイズが肥大化し、クローンやプッシュに時間がかかる原因になります。
そこで登場するのが Git Large File Storage (LFS) です。

Git LFSは、大きなファイルをGitリポジトリに直接保存する代わり、
軽量なポインタを保存し、実際のファイルは別の場所に格納する仕組みです。
これにより、リポジトリサイズを小さく保ち、パフォーマンスを向上させることができます。

Git LFS の基本的な使い方

インストール

まずはGit LFSをインストールします。
方法はOSによって異なりますが、多くの場合パッケージマネージャでインストールできます。
例として、macOSではHomebrewを使って以下のようにインストールします。

git install install

リポジトリでの有効化

GitリポジトリでGit LFSを有効化します。

git lfs install

追跡対象ファイルの指定

どの種類のファイルをLFSで管理するかを指定します。例えば、.psd ファイルをLFSで管理する場合:

git lfs track "*.psd"

これにより、.gitattributes ファイルに設定が記述されます。このファイルもリポジトリで管理する必要があります。

ファイルの追加とコミット

通常のGitワークフローと同様に、ファイルをステージング、コミット、プッシュします。

git add .gitattributes
git add your-large-file.psd
git commit -m "Add large PSD file using LFS"
git push origin main 

落とし穴: 事後登録の悲劇

先日、まさにこのGit LFSでハマってしまいました。
大きなファイルを既にコミットしてしまった後に、LFSに登録しようとしたのです。

具体的には、以下のような流れでした。

  1. 大きな動画ファイル video.mp4 を普通にGitに追加・コミット・プッシュ。
  2. リポジトリが大きくなりすぎて問題が発生したため、Git LFSを導入することに。
  3. git lfs track "*.mp4" を実行して、MP4ファイルをLFSで追跡するように設定。
  4. video.mp4 を再度 git add、コミット、プッシュしようとしたらエラーが発生!

なぜエラーになったのか? それは、既にGitの履歴に記録されている大きなファイルは、後からLFSに登録しても、LFSの仕組みで管理されるようにはならない からです。 LFSは、git lfs track コマンド実行 以降 に追加されるファイルに対してのみ有効なのです。

解決策: ファイルのマイグレーション

この問題を解決するには、git lfs migrate コマンドを使ってファイルをマイグレーションする必要があります。 具体的には以下の手順で解決しました。

  1. 対象のファイルをLFSで管理するように設定: git lfs track "*.mp4"
  2. 履歴を書き換えて、過去のコミットから大きなファイルをLFSポインタに置き換える: git lfs migrate import --include="*.mp4"
  3. リモートリポジトリに強制プッシュ: git push --force-with-lease origin main (※ 強制プッシュは注意して使用してください!)

まとめ

Git LFSは大きなファイルを扱う際に非常に便利ですが、既にコミットしたファイルを事後的にLFSで管理しようとする場合には注意が必要です。git lfs migrate コマンドを適切に使い、過去のコミットを修正することで、リポジトリを健全な状態に保ちましょう。

参考文献

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?