1. ホーム
  2. git

[解決済み] なぜ私の git リポジトリはこんなに大きいのですか?

2022-04-26 14:15:53

質問

145M = .git/objects/pack/

各コミットとその前のコミットの差分のサイズを、各ブランチの先端から逆算するスクリプトを書きました。これは圧縮せず、ブランチ間の同一ファイルやブランチ間の共通履歴を考慮しない場合の値で、129MBでした。

Gitはこれらのことをすべて考慮に入れているので、もっとずっと小さなリポジトリになると思います。では、なぜ.gitはそんなに大きいのでしょうか?

してきました。

git fsck --full
git gc --prune=today --aggressive
git repack

ファイル数/コミット数についてお答えすると、私はそれぞれ40ファイルについて19のブランチを持っています。 287のコミットは、以下を使用して見つかりました。

git log --oneline --all|wc -l

これに関する情報を保存するのに、10メガバイトもかかってはいけないのです。

どのように解決するのか?

最近、間違ったリモートリポジトリをローカルリポジトリに引き込みました( git remote add ...git remote update ). 不要なリモート参照、ブランチ、タグを削除しても、私のリポジトリには1.4GB(!)もの無駄な領域が残っていました。 を使ってクローンすることでしか、これを取り除くことができませんでした。 git clone file:///path/to/repository . なお、この file:// はローカルリポジトリをクローンする際に大きな違いをもたらします。ディレクトリ構造全体ではなく、参照されているオブジェクトのみがコピーされます。

編集:新しいレポのすべてのブランチを再作成するためのIanのワンライナーです。

d1=#original repo
d2=#new repo (must already exist)
cd $d1
for b in $(git branch | cut -c 3-)
do
    git checkout $b
    x=$(git rev-parse HEAD)
    cd $d2
    git checkout -b $b $x
    cd $d1
done