リポジトリがすでに2GBに非常に近い場合、すべてのビットバケットgit履歴からバイナリファイルを削除するにはどうすればよいですか?

グラビトン

Bitbucket gitリポジトリのサイズ制限は2GBですが、バイナリファイル(拡張子がとのファイル)が多いため、すでにその制限に危険なほど近づいているリポジトリが1つあります(これをbigsizeリポジトリと呼びます)。制限に非常に近いので、バイナリファイルを含むコミット操作でサイズが2GBを超えるため、コミットが失敗して続行できなくなるのではないかと心配しています。dllmsm

さて、bigsizeリポジトリのサイズを小さくするための最善の方法は?

LFS機能の使用を考えていますが、LFSスペースに1GBの制限があり、このリポジトリの使用には不十分であると考えています(リポジトリサイズの大部分はバイナリファイルからのものであるため) LFSに保存したい)。

だから私はリポジトリと履歴からすべてのバイナリファイルを削除することを考えています(ローカルドライブにあるので、ソース管理からそれらを失ってもかまいません)、現在のサイズを考慮してこれを行う最善の方法私のビッグサイズのレポの?

私が持っている攻撃計画:

  1. bigsizeリポジトリのすべてのブランチ(はい、この巨大なリポジトリに複数のブランチがあります)について、すべてのバイナリファイルを削除したことを確認してください(gitignore指定*.dllgit rm -rf -cachedするコミットを送信してコマンドを使用します)。これが必要なのは、「デフォルトでは、BFGは、マスター(または「HEAD」)ブランチの最新のコミットの内容を変更しませんが、それ以前のすべてのコミットはクリーンアップします。
  2. 次に、BFG delete-filesコマンド使用して「履歴を書き換える」ことで、リポジトリのサイズを縮小します。

このアプローチは、2GBに非常に近いレポで機能しますか?手順1で、を使用git rmすると、履歴が追加され、リポジトリのサイズが2 GBを超えてしまうため、失敗するのではないかと心配しています。

重要な詳細:

  1. 私はリポジトリの唯一の作者です
  2. 現在、私は複数のアクティブなブランチです。歴史を通して、メインブランチにマージされる複数のブランチがあります
  3. ディスカッションやコードレビューにリポジトリを使用せず、タグも使用しません。私はそれを単一のブランチとして使用し、時々ブランチとマージを行います
グラビトン

BFGリポジトリクリーナーを使用して問題を解決する方法は次のとおりです。私と同じ状況に直面する可能性のある将来の人々に役立つように、私はそれを書き留めます。

始める前に、すべてのブランチが「クリア」であることを確認してください。つまり、必要なすべての変更がそれぞれのブランチにプッシュされます。巨大なリポジトリに大きなリポジトリという名前を付け、にあると仮定しD:\MyCompany\bigます。

また、実際に本番レポで作業する前に、おもちゃのレポでこれを試してみることもできます。

  1. あなたのクローンの大きなブランドの新しいフォルダ(にレポをgit clone --mirror [email protected]:YourUserName/big.git)、この新しいフォルダが元の外にあることを確認してください大きなレポフォルダ。これが完全に別のものであることを確認する必要がD:\MyCompany\bigあります(したがって、恐れることなく実験できます)。このフォルダがD:\big_workであると仮定するとD:\big_work\big.git、クローンを作成した後、フォルダを見つけることができます。
  2. big.gitフォルダを別の場所にバックアップし、に入れましょうD:\backup
  3. バイナリファイルが実際にbitbucket(またはリポジトリプロバイダー)によって提供されるLFS制限を超えていることを確認しますここでの私の場合、バイナリファイルのサイズが1GB未満であることを確認する必要があります。これを行うには、big.gitBFGを介してのgitをLFSに変換します。コマンドラインで:

    3.1。 cd D:\big_work

    3.2。java -jar <path to>bfg-x.x.x.jar --convert-to-git-lfs "*.{dll, msm}" --no-blob-protection big.gitD:\big_workフォルダ内にいる間にこれを行うようにしてください)

  4. D:\big_work\big.git\lfsフォルダのサイズを確認してください。1GBを超えていますか?いいえの場合は、ここのlfs手順4から続行して、バイナリファイルの変換に進むことができます残りを読む必要はありません。

  5. lfsフォルダが1GBを超える場合は、リポジトリからバイナリファイルを削除し、履歴を書き換える必要があります。
  6. big.gitからフォルダを削除し、(手順2で行ったバックアップ)D:big_workから復元D:\backupします。
  7. ここに最も重要なステップがあります:実際の削除多くのガイドが、この手順を実行する前に、コミットがクリーンであること(つまり、現在のリポジトリの状態にバイナリファイルがないこと)を最初に確認することが重要である理由について説明しています。しかし、私はこのような不必要で気が散るようなアドバイスを見つけます。必要なものをすでによく知っているので、つまり、現在と過去のすべてのバイナリファイルをすべてのブランチから削除し、マージまたはマージ解除すると、リポジトリはバイナリファイルで汚染されていないように見えるはずです。いつでも-この警告は無視する必要があります。私たちno-blob-protectionはこの目的のために核兵器を持ち込みます

    7.1。 cd D:\big_work

    7.2。 java -jar <path to>bfg-x.x.x.jar --delete-files "*.{dll,msm}" --no-blob-protection big.git

  8. cd D:\big_work\big.git

  9. git reflog expire --expire=now --all && git gc --prune=now --aggressive
  10. git push
  11. 次に、bitbucketの大きなリポジトリに移動すると、すべてのdllとmsmsがすべてのブランチとすべての履歴から削除されていることがわかります。これにより、すでに正しいことを行っているという確信が得られるはずです。バイナリファイルが削除され、リポジトリが保存されます。
  12. あなたのオリジナルのことを覚えておいてください大きなレポは次の場所にありD:\MyCompany\big、あなたが最初sourcetreeブックマークを削除する必要があり、名前が変更されますので、あなたは、あなたのsourcetreeのブックマークがこのフォルダに指摘しているD:\MyCompany\bigD:\MyCompany\big_oldbig_oldバイナリファイルをリポジトリ内に配置したくないが、ハードディスク上に配置したい場合でも、フォルダはまだ削除しないでくださいbig_old。フォルダは自然なバックアップを提供します。big_old本当に価値がないことを確認した後、将来のある時点でフォルダを削除できます。
  13. クリーンなリポジトリをハードディスクに再度複製する必要があります。重大D:\MyCompany\bigな変更を避けるために、フォルダにクローンを戻しましょう
  14. sourcetreeの大きなリポジトリブックマークをD:\MyCompany\bigフォルダーに再ポイントます。
  15. 必要に応じて、必要なバイナリファイルbig_oldbigフォルダに段階的に転送ます。
  16. サイズ小さくするためにゴミ収集操作を実行するにはビットバケットサポート連絡する必要がある場合があります

主な参考資料:

  1. NoobのBFG
  2. BFGを使用してリポジトリをGitLFSに移行します
  3. BFGリポジトリクリーナー

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ