BFG を使用してリポジトリを Git LFS へ移行する
Biitbucket リポジトリの既存の大容量ファイルに対して Git LFS 拡張機能を使用したい場合、それらをトラッキングするだけでは LFS ファイルへの変換は行われません。大容量ファイルは引き続き Git リポジトリの一部であるため、それらのファイルを変換するには、履歴を書き換える必要があります。
このページでは、bfg-repo-cleaner を使用して Bitbucket リポジトリの Git 履歴を変更する場合の 3 つの段階について説明します。
次の点に留意する必要があります。
- BFG はリポジトリの Git 履歴を完全に書き換えます。
- 移行プロセスは時間を要する場合があります。この期間、ユーザーやワークスペースのすべてのメンバーは既存のリポジトリで作業を行うことができません。
移行を開始する前に次の点をご確認ください。
- 変換するファイルに対して十分な LFS ストレージがあること。ファイルの現在のバージョンと履歴に含まれる過去のすべてのバージョンに対応できる必要があります。
- リポジトリへのアクセス権を持つすべてのユーザーがすべての変更をプッシュ済みであること。プッシュされていない変更をあとからマージすることはできません。
- 移行中はリポジトリ権限を調整してプッシュを禁止すること。
- ローカル マシンに Java Runtime Environment (Java 7 以降) がインストールされていること。
- https://rtyley.github.io/bfg-repo-cleaner/ から最新の BFG バージョンをダウンロードしていること。
ご質問がある場合は、Git LFS サポートのリリース ノート、または「BFG リポジトリ クリーナー」ページを参照してください。
A. リポジトリの既存のファイルの Git LFS への変換
ターミナルで以降のすべてのコマンドを実行します。
1. リポジトリのクローン
git clone --mirror git@bitbucket.org:<username>/<repo-name>.git
mirror フラグでクローンを行うと、ベア リポジトリが作成されます。これを行うと、ユーザーや同僚のすべてのブランチを取得できます。
<repo-name>.git
という名前のフォルダが作成されます。
2. クローンされたリポジトリのバックアップ
<repo-name>.git
フォルダのバックアップを作成し、問題が発生した場合にこのバージョンに戻れるようにします。
3. BFG での Git 履歴の書き換え
https://rtyley.github.io/bfg-repo-cleaner/ から最新の BFG バージョンをダウンロードしていることを確認します。
ダウンロードした bfg-x.x.x.jar
ファイルのロケーションへの絶対パスを使用します。
java -jar <path to>bfg-x.x.x.jar --convert-to-git-lfs "*.{png,mp4}" --no-blob-protection <repo-name>.git
この例では png
ファイルと mp4
ファイル タイプを変換していますが、他のファイル タイプも同様に変換できます。
これはすべてのブランチのすべての履歴を書き換え、すべての png
および mp4
ファイルを LFS バージョンで置き換えます。
4. Git LFS の初期化
cd <repo-name>.git
git lfs install
これは、ベア リポジトリに pre-push hook を追加します。
5. 変換したリポジトリを Bitbucket にプッシュして戻す
git push --force
これはすべての大容量ファイルを LFS ストレージにプッシュし、新しく書き換えた履歴で Git 履歴を上書きします。
ご質問がある場合は、「BFG リポジトリ クリーナー」ページまたは Git LFS サポートのリリース ノートを参照してください。
B. Git LFS での以降のトラッキングのセットアップ
1. 変換したリポジトリを Bitbucket からクローン
git clone git@bitbucket.org:<username>/<repo-name>.git
前述の手順で変換した Git リポジトリをクローンします。
2. Git LFS ファイルでのファイルのトラッキング
「Git LFS ファイルのトラッキングをローカルにセットアップする」をご参照ください。
C. ワークスペースのメンバーによる更新されたリポジトリへの変更の許可
各ユーザーがローカルに Git LFS 拡張機能をインストールしている必要があります。手順については、「Bitbucket で Git LFS を使用する」をご参照ください。
その後、ユーザーはローカルにあるリポジトリの既存のクローンを削除して、LFS が有効化された新しいバージョンをクローンする必要があります。
git clone git@bitbucket.org:<username>/<repo-name>.git