BFG を使用してリポジトリを Git LFS へ移行する

BFG と BFG Repo-Cleaner は、Atlassianではサポートされていないサードパーティ製のユーティリティです。このサポート ドキュメントに記載されている資料は教育のみを目的としており、Atlassian や Bitbucket Cloud によってサポートされているプロセスまたはリソースではありません。ご質問がある場合は、Git LFS サポートのリリース ノートか「BFG Repo-Cleaner」ページをご参照ください。

以下についてご理解ください。

  • BFG はリポジトリの Git 履歴を完全に書き換えます。

  • 移行プロセスがすべて完了するまである程度の時間を要する場合があります。移行中は、ご本人とワークスペースのどのメンバーも既存のリポジトリで作業を行うことができません。

  • サイズがローカルで縮小された場合でも、BFG を使用して Git LFS に移行したからといって Bitbucket Cloud で報告されるリポジトリのサイズが縮小される保証はありません。これは、マージされたプル リクエストの差分を保存するために、クローンでは表示されない Git コミットへの追加の参照が Bitbucket Cloud によって保存されるためです。これらの参照を特定して Bitbucket Cloud ストレージから削除するには、当社のサポート チームまでご連絡いただく必要があります。参照を削除すると、過去のプル リクエスト データが削除される可能性があることに注意してください。

Biitbucket リポジトリの既存の大容量ファイルに対して Git LFS 拡張機能を使用したい場合、それらをトラッキングするだけでは LFS ファイルへの変換は行われません。大容量ファイルは引き続き Git リポジトリの一部であるため、それらのファイルを変換するには、履歴を書き換える必要があります。 

このページでは、bfg-repo-cleaner を使用して Bitbucket リポジトリの Git 履歴を変更する場合の 3 つの段階について説明します。

移行を開始する前に次の点をご確認ください。

  • 変換するファイルに対して十分な LFS ストレージがあること。ファイルの現在のバージョンと履歴に含まれる過去のすべてのバージョンに対応できる必要があります。

  • リポジトリへのアクセス権を持つすべてのユーザーが[すべての変更]をプッシュ済みであることプッシュされていない変更をあとからマージすることはできません。

  • 移行中はリポジトリ権限を調整してプッシュを禁止すること。

  • ローカル マシンに Java Runtime Environment (Java 7 以降) がインストールされていること。

  • https://rtyley.github.io/bfg-repo-cleaner/ から最新の BFG バージョンをダウンロードしていること。

ご質問がある場合は、Git LFS サポートのリリース ノート、または「BFG リポジトリ クリーナー」ページを参照してください。

A. リポジトリの既存のファイルの Git LFS への変換

ターミナルで以降のすべてのコマンドを実行します。

1. リポジトリのクローン

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 ファイルのロケーションへの絶対パスを使用します。

1 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 の初期化

1 2 cd <repo-name>.git git lfs install

これは、ベア リポジトリに pre-push hook を追加します。

5. 変換したリポジトリを Bitbucket にプッシュして戻す

1 git push --force

これはすべての大容量ファイルを LFS ストレージにプッシュし、新しく書き換えた履歴で Git 履歴を上書きします。

ご質問がある場合は、「BFG リポジトリ クリーナー」ページまたは Git LFS サポートのリリース ノートを参照してください。


B. Git LFS での以降のトラッキングのセットアップ

1. 変換したリポジトリを Bitbucket からクローン

1 git clone git@bitbucket.org:<username>/<repo-name>.git

前述の手順で変換した Git リポジトリをクローンします。

2. Git LFS でのファイルのトラッキング

Git LFS ファイルのトラッキングをローカルにセットアップする」をご参照ください。 


C. ワークスペースのメンバーによる更新されたリポジトリへの変更の許可

各ユーザーがローカルに Git LFS 拡張機能をインストールしている必要があります。手順については、「Bitbucket で Git LFS を使用する」をご参照ください。 

その後、ユーザーはローカルにあるリポジトリの既存のクローンを削除して、LFS が有効化された新しいバージョンをクローンする必要があります。

1 git clone git@bitbucket.org:<username>/<repo-name>.git

その他のヘルプ