2011-08-06 37 views
13

MercurialリポジトリをGitに変換しました。高速エクスポートを使用しています。しかし、Gitリポジトリは巨大です.Gitでは18 GB、Mercurialでは3.4 GBです。私のクリーンアップのステップのどれもが助けられていない。なぜ私のGitリポジトリはMercurialバージョンよりもずっと大きくなっていますか?

My Mercurialリポジトリは、毎日更新される1つの65 MBファイル(SQLite形式のAnkiフラッシュカード)によって支配されています。その歴史は.hg/store/dataの下で2.9GBになりました。

私はGitが履歴を少し良く圧縮できると思っていましたが、リポジトリを18 GB以下に縮小できませんでした。

私はgit prunegit gcなどを試してみました。私も.gitフォルダを圧縮しようとしましたが、それはまだ正確に18 GBになっています。

何か不足していますか?

更新:私はBazaar(bzr)を試しましたが、私のリポジトリはわずか2.3GBに圧縮されました。ニース!

+0

なぜこれが投票されたのか分かりません... – Omnifarious

+1

'git gc --aggressive'を試しましたか? – cdhowie

+0

私は 'git gc --aggressive'を試しましたが、しばらくしてメモリエラーで亡くなりました。しかし、その時までに、作成していた一時的なパックファイルはすでに5GBを超えていました...以前実行した 'git gc'よりも良く見えませんでした。 – slattery

答えて

7

git gcが失敗している場合は、手動でgit repackを実行してからgit gcを実行してみてください。 SVN、Gitのと水銀との


私の観察は:

私はいつもSVNとHgのリポジトリは、対応するGitリポジトリよりもはるかに小さかったことを観察しました。これは、ファイルを変更するたびにテキストまたはバイナリが変更され、新しいフルオブジェクトが追加されるためです。 SVNでは、バイナリの場合でもdiffだけが追加され、SVNのバイナリdiffingも非常に優れています。

しかし、パックファイルは、同様のオブジェクトにdiff(デルタ)しか格納されず、圧縮されているため、パックファイルが入っています。梱包しても、Gitリポジトリはファイルの種類やファイルの変更量に応じて大きくなる傾向があります。これは私がGitで受け入れるようになったことであり、Gitを使っていろいろな操作がどれくらい速いかを考えれば喜んで妥協です。

+3

SVNとgitの私の経験はまったく逆です。私が比較したリポジトリでは、git repoはSVNより3〜5倍小さいものです。 –

+1

@ Ryan Stewart - 私が言ったように、それはファイルの種類と変更の量に依存するつもりです。中規模から大規模のバイナリを使ったリポジトリは、パッケージ化されていてもSVNよりもGitで大きくなることがあります。 – manojlds

+0

ありがとう@manojlds .. Gitがそれほど多くのスペースを占めるのは残念だが、私はそれを受け入れる必要があると思う。 Mercurialにこのリポジトリを保管しておきます。おそらく将来、GitはMercurialと同じくらい効率的にこのリポジトリを保存することができます。 – slattery

9

理由の1つは、Mercurialがバイナリであってもdiffを含む非常にコンパクトな記憶形式を持つということです。差分を使用してバージョンを再作成すると非常に時間がかかるので、差分+古いオリジナルがフルスナップショットの2倍のサイズを超えるとすぐにフルスナップショットが保存されます。

個人的には、データベースファイル自体ではなく、sqliteデータベースのダンプを保存して、その場所を確認します。それははるかに効率的かもしれません。

gitの保存形式がわかりません。しかし、私はそれがMercurialのものと同じ方法でdiffsを伴わないと推測しています。

+3

Gitは差分圧縮も行い、続いてzlibをパックに渡します。 – cdhowie

+0

情報ありがとうございます。私は快適にこのリポジトリをGitに切り替えることができなかったことに失望しています。 – slattery

+6

+1は、db自体のバージョン管理ではなく、sqliteダンプを提案します。 Git(とMercurialも実際には)主に、あらゆる種類のデータのバージョン管理システムではなく、*ソース*コントロールシステムであることを意図しています。もちろん、あなたがそれに投げるものは確かに処理できます。それはちょうど1トンのスペースを取るかもしれません。 – MatrixFrog

0

Mercurialから移行されたリポジトリでgit gc --aggressiveを実行すると、私の仕事になりました。それは500 MBから150 MBに減少しました。

関連する問題