2017-11-24 9 views
1

私は4歳のgitリポジトリを持っていて、とても巨大になり始めました:〜30GO、60.000ファイル。毎日1回または2回のコミットが行われます。私は1年以上前のすべてのコミットを最初のコミットにスカッシュしたいと思います。しかし、技術的な問題のために、私はレポを再現することはできません、私はそれを使用する必要があります。入手可能なgitバージョンは1.7.2.5です(更新することはできません)。ディスク容量は100goに制限されているため(まだ70goしか利用できません)、デバイスメモリは4go(19Moのスワップ、はいMO ...)で、別のコンピュータでもリポジトリを移動することはできません。非常に巨大なリポジトリと限られたリソースの中で、1年以上経過したすべてのSquashをコミットします

私はこのページで選択したソリューションを試しましたSquash the first two commits in Git?、2009年2月版。それは 'git rebase --onto'まで動作します。 git-rebaseはOutOfMemoryエラーを引き起こします。なぜなら、原因がわからないから、1回のショットですべてのコミットを再生しようとしていると思われます。私はgit-cherry-pickを使い、一度に1つずつコミットしてから、その上でマスターを動かすことを考えています。

いいですか?誰かが良いアイデアを持っていますか?すごい! :)

+0

仮想マシンが使用できるメモリを増やすだけで、メモリ不足の問題を修正する可能性があります。 –

+0

VMの物理設定は固定されていますが、これは本当に古いプロプラエタリな仮想システムです。私が増やすことができる唯一のものは、余分なディスクを追加することによってディスクストレージです。 – djo

答えて

0

gitは、コミットの数が問題を引き起こしているとは考えにくいですが、gitはテキストファイルを圧縮すると非常に効率的です。

gitリポジトリのサイズを縮小する最も良い方法は、BFG repo cleanerなどのツールを使用して履歴から大きなバイナリファイルを削除することです。

NugetパッケージやJarなどのコンパイルされた依存関係は、主にartefactリポジトリ(gitではなく)に格納する必要があります。アプリケーションビルドプロセスはビルド時に依存関係を取得します。

また、Git LFSを使用すると、バイナリファイルをより透過的に格納することができます。

+0

実際、リポジトリにはテキストファイルしかありません。バイナリはありません。しかし、BFGやgit-filter-branchについても、歴史のなかで古いファイルや無用なファイルを削除することを考えています。 – djo

関連する問題