たとえば、 ID のコミットがあります56f06019
。そのコミットで、誤って大きなファイル (50 MB) をコミットしてしまいました。別のコミットで、同じファイルを適切なサイズ (小さい) で追加しました。これで、クローンを作成するとリポジトリが重くなりすぎます。リポジトリの履歴からその大きなファイルを削除して、リポジトリのサイズを小さくするにはどうすればよいですか?
ベストアンサー1
ここで手順を簡単に説明します。
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
前述のリベース オプションと同様に、書き換え操作です。公開履歴がある場合は、新しい参照をプッシュするfilter-branch
必要があります。--force
このfilter-branch
アプローチは、アプローチよりもかなり強力ですrebase
。
- すべてのブランチ/参照を一度に操作できます。
- タグの名前を即座に変更します
- ファイルの追加以降に複数のマージコミットがあった場合でも、問題なく動作します。
- ブランチの履歴内でファイルが複数回追加/削除された場合でも正常に動作します。
- 新しく無関係なコミットを作成するのではなく、関連するツリーを変更しながらコピーします。つまり、署名されたコミットやコミットノートなどが保持されます。
filter-branch
バックアップも保持されるため、reflog とガベージ コレクションを期限切れにしない限り、リポジトリのサイズはすぐには減少しません。
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger