git
過去にバイナリ テスト ファイルと Java ファイルが含まれていたため、管理できないサイズに成長したリポジトリが多数あり.jar
ます。
これらのリポジトリをgit filter-branch
ing し、それらが使用されているすべての場所 (リポジトリによってはそれぞれ数十から数百のデプロイメント) で再クローンを作成し、履歴の書き換えに関する問題があるかどうか疑問に思っていました。その他のソリューション。
理想的には、各リポジトリの履歴を書き換えずに、問題のあるファイルを外部化したいと考えています。理論的には、同じファイルを同じサイズと同じハッシュでチェックアウトし、別の場所 (ローカル オブジェクト ストアではなくリモート) からそれらを調達しているため、これは可能であるはずです。悲しいかな、これまでに見つけた潜在的な解決策のどれも、これを可能にしているようには見えません。
git-annexから始めて、私の問題の解決策に最も近いのはHow to retroactively annex a file already in a git repoでしたが、大きなファイルを削除するだけの場合と同様に、変換するには履歴を書き直す必要がありますオリジナルgit add
を にgit annex add
。
そこから進んで、 git -annex ではないものにリストされている他のプロジェクトを調べ始めたので、 git-bigfiles、git-media、およびgit-fatを調べました。残念ながら、私たちは のgit-bigfilesフォークを使用できません。git
なぜなら、私たちは Eclipseショップgit
であり、とEGitを混合して使用しているためです。既存の大きなファイルを外部の同等のものに置き換えることはできますが、既存の大きなファイルを削除するために履歴を書き直す必要があるため、git-mediaまたはgit-fatが私が望むことを実行できるようには見えません。コミットされています。
git filter-branch
では、履歴を書き換えずに .git リポジトリをスリム化することは可能でしょうか?それとも、再デプロイの負荷全体を使用する計画に戻るべきでしょうか?
余談ですが、これは可能であると信じていますが、おそらくgit
現在の浅いクローンの実装と同じ制限に関連付けられています。
Git は、同じ BLOB に対して複数の可能な場所を既にサポートしています。これは、特定の BLOB がルース オブジェクト ストア( .git/objects
) またはパック ファイルgit-annex
(.git/objects) にある可能性があるため、理論的には、そのレベルでフックされるようなものが必要になるだけです。上位ではなく (つまり、必要に応じてオンデマンドのリモート BLOBをダウンロードするという概念があります)。残念ながら、このようなことを実装したり、提案したりする人を見つけることができません。