Gitリポジトリのサイズを小さくする


290

レポサイズの縮小に関する優れたチュートリアルを探しましたが、見つかりませんでした。レポサイズを縮小するにはどうすればよいですか?それは約10 MBですが、Herokuは50 MBしか許可しておらず、アプリの開発がほぼ完了していません。

通常の容疑者(ログ、ベンダー、ドキュメントなど)を.gitignoreに追加しました。最近追加したのは.gitignoreだけですが。

助言がありますか?


1
私はちょうどそれをしました、そしてそれは2.2 mbにそれをもたらしました...どうもありがとう!それはHeroku..hmmのレポサイズを縮小するようには思われませんでした
送信済みhil

11
--forceを使用してプッシュします。変更がなかった場合でも(新しいコミットがない場合など)、内容は上書きされます
Marcin Gil

1
@MarcinGil-以下では、VonCは、リモートサーバーをクリーンアップするためにサーバーにアクセスする必要があると述べています(私が正しく解析している場合)。
jww

1
他の読者がに何を追加すればよいかわからない場合に役立つコメントとして.gitignore、gitignore.ioには、開発.gitignore環境に基づいて適切な設定を行うのに役立つ素晴らしいサービスがあります。
Blairg23 2017年

回答:


351

git gc --aggressiveは、プルーニングプロセスを強制的に実行する1つの方法です(確認:)git gc --aggressive --prune=now。あなたは持っている他のコマンドすぎレポをきれいにします。ただし、場合によっては、git gc単独でリポジトリのサイズを増やすことができます。

またfilter-branch、の後に使用して、履歴から削除するディレクトリをマークすることもできます(さらに領域を増やします)。こちらをご覧 ください。しかし、それは誰もあなたの公開レポから引っ張っていないことを意味します。filter-branchはバックアップ参照をに保持できる.git/refs/originalため、ディレクトリもクリーンアップできます。

最後に、このコメントこの質問で述べたよう ; reflogをクリーニングすると、次のことが可能になります。

git reflog expire --all --expire=now
git gc --prune=now --aggressive

さらに完全で、おそらく危険な解決策は、gitリポジトリから未使用のオブジェクトを削除することです。


別のシナリオでは、stackoverflow.com
questions / 1029969 /…

1
自己への注意:リモートブランチを忘れないでください:stackoverflow.com/questions/11255802/...
VonC

1
自分への注意:リモートタグを忘れないでください
saiyancoder 2014年

1
リモート参照に加えて、reflogは、削除しようとしている参照が保持される原因となる可能性があるもう1つのものです。 stackoverflow.com/q/27489761/1072626
vossad01

1
@jww私はこれが純粋にローカルな操作であることを確認します。リモートリポジトリのサイズには影響しません。同じことを行うには、そのリモートリポジトリのサーバーに直接アクセスする必要があります。
VonC

94

お返事ありがとうございます。これが私がしたことです:

git gc
git gc --aggressive
git prune

それはトリックをしたようです。私は約10.5MBから始めましたが、現在は980KBを少し超えています。


8
pruneは常にによって実行されますgc(デフォルトは2週間前)。
Cas

117
Uは3つすべてを今まで使用してプルーンで実行できますgit gc --aggressive --prune=now
rahul286

1
しかし、リポジトリを削除してから再度複製すると、サイズはまだ大きくなります。それをどのように扱いますか?
cwtuan

2

私の場合、いくつかの大きな(> 100Mb)ファイルをプッシュしてから、それらの削除に進みました。しかし、それらはまだ私のリポジトリの歴史に残っているので、私もそれらから削除する必要がありました。

トリックは何でしたか:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

次に、ブランチに力を加える必要があります。

git push origin <your_branch_name> --force

bfgは、brewを使用してLinuxおよびmacOSにインストールできるツールです。

brew install bfg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.