GitHub で大きなファイルを扱う
ソースコード管理に git を使用している場合、GitHub や他のリポジトリを使用して大きなファイルを含めようとすると問題が発生する可能性があります。
大きいというのは、数十メガバイトの範囲、特に ISO イメージなどの大きなファイルを意味します。
以前から取り組んでいるプロジェクト(詳細は近日公開予定)で、この問題に遭遇しました。このプロジェクトでは、6000×9000ピクセルの.PNG画像が生成され、1枚あたり30MB以上ものサイズになります。コードはPythonですが、いくつかサンプルコードを追加したかったので、GitHubにプッシュしようとしたら、git spun が延々と続き、延々と続きました。1時間後、このプロジェクトを強制終了しました。
どうやらGitは大きなファイルを本当に苦手としているようです。さらに悪いことに、頻繁に変更される大きなファイルがある場合、以前のバージョンがすべて変更されるため、リポジトリのサイズが巨大化します。そのため、プロセスの一部として「ISOを再構築してからリポジトリを更新する」という手順を踏んでいると、将来的に大変な苦労を強いられることになります。
私の場合、おそらく変更されることのない.PNGファイルが数枚必要でした。ベストプラクティスとしてはリポジトリの外に別々に保存するのが良いのですが、GitHubを使っているので、全てをGitHubに保存するのが理にかなっています。
GitHubの制限を克服するソリューション: git lfs。GitHubから:
Git LFSは、Git を使用して大きなファイルを管理するためのコマンド ライン拡張機能および仕様です。
クライアントは Go で書かれており、Mac、Windows、Linux、FreeBSD 用のコンパイル済みバイナリが利用可能です。
使い方
インストールはパッケージマネージャーを使うのと同じくらい簡単です。私のMacではHomebrewを使っています。
brew git-lfs をインストールする次に設定を行います。
git lfs インストールリポジトリで、Git LFSに処理内容を伝える必要があります。私の場合は「すべてのPNGファイル」としました。
git lfs トラック "*.png"
次に、Git LFS が情報を保存する .gitattributes ファイルを追加する必要があります。
git で .gitattributes を追加する
そして残りはおなじみのものです:
git で例.png を追加する git commit -m "example.png を追加しました" git push -u origin main
その後、巨大な.PNGファイルは完璧に動作するようになりました