私は現在しようとしている削減サイズの私のGitのリポジトリが、顔の多くの問題を。
前書き
何千ものコミットと10以上のブランチを含む巨大で複雑なGitリポジトリがあります。現在のサイズは2GBを超えています。
私がやりたいこと
サイズをできるだけ小さくするために、リポジトリ履歴をクリーンアップしたいと思います。新しいルートコミットになりたい特別なコミットを選択しました(それを呼び出します<NEW_ROOT>
)。前にすべてのコミット を削除し、後にすべてのコミット<NEW_ROOT>
を保持したいと思います。
私は保持したいだけmaster
で、おそらくdevelop
ブランチ、他のブランチはサイズを減らすために履歴から削除する必要があります。
手順の最後に、すべてをリモートにプッシュして、更新されたマスターとオリジンのみを保持するようにします(基本的にはローカルの状況を反映している必要があります)。
これまでに試したこと
私はウェブをたくさん閲覧し、多くの解決策を見つけましたが、どれも私にはうまくいきませんでした。特に、私の場合、そのような解決策は完璧だと思いますが、残念ながら、リベースするときに多くの競合が発生しました。
また、私が見つけた多くのソリューションは、廃止された非推奨のツール/オプション(例git filter-branch
)を参照しているため、多くの苦労をしました。
抜け道を見つけるのを手伝ってくれませんか。
どうもありがとう!
これは、ローカルの大規模リポジトリの浅いクローンを作成することで達成できることのように思えます。
浅いリポジトリには不完全な履歴があり、そのコミットの一部では親が焼灼されています。[...]これは、上流に記録された実際の履歴がはるかに大きい場合でも、プロジェクトの最近の履歴のみに関心がある場合に役立つことがあります。
アイデアは、新しいルートと見なしたコミットから開始して、ローカルリポジトリを新しいディレクトリに浅く複製することです。このソリューションは、新しいリポジトリに単一のブランチを保持することにのみ関心があることを前提としていることに注意してください(例master
)。
最初に行う必要があるの<NEW_ROOT>
は、既存のリポジトリ内のの親を指すブランチ参照を作成することです。
cd your-large-repo
git branch new-root <NEW_ROOT>^
浅いクローンのカットオフポイントnew-root
として使用します。新しいリポジトリに含めたいので、カットオフポイントをその親に設定します。もちろん、から到達可能である必要があります。<NEW_ROOT>
<NEW_ROOT>
master
この時点で、次のことを指定して、ローカルリポジトリを新しいディレクトリに複製できます。
master
ブランチにのみ興味がありますnew-root
完全なコマンドは次のとおりです。
git clone --branch master --shallow-exclude=new-root file://C:\path\to\your-large-repo C:\path\to\your-new-repo
この--shallow-exclude
オプションはnew-root
、クローンに至るまでのすべてのコミットを除外するようにGitに指示するものです。
ここで、にcd
入るyour-new-repo
と、master
ブランチのみが含まれ、ルートコミットがであることがわかります<NEW_ROOT>
。
新しいリポジトリはにorigin
設定されfile://C:\path\to\your-large-repo
ます。したがって、先に進む前に、リモートリポジトリの実際のURLに置き換える必要があります。
git remote set-url origin https://example.com/your-large-repo.git
この時点で、新しい履歴をリモートリポジトリに強制的にプッシュすることができます(強制的にプッシュした場合の結果に関する通常の警告があります)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加