Imansible inviare a GitHub a causa del file di grandi dimensioni che ho già eliminato

Attualmente ho

  1. Vuota il repository GitHub
  2. Server repo SSH (principale)
  3. Repo locale

Il repository server SSH era il repository più aggiornato (sito di produzione), quindi ho eseguito un clone Git da lì a locale. Ho quindi provato a fare una git push a GitHub.

Tutto è andato bene ma poi ha detto qualcosa su filename.gz essere troppo grande per GitHub. Non avevo bisogno di questo file, quindi ho eseguito diversi comandi Git per eliminarlo dalla cache di Git e quindi reindirizzato al server SSH.

Non vedo localmente il file di grandi dimensioni ma è ancora sul server SSH anche se git diff non restituisce nulla e restituisce push git “Tutto è aggiornato” – E anche se il file non è visibile nel repository locale quando provo a spingere a GitHub ho ancora errore su di esso

remote: errore: il file fpss.tar.gz è 135.17 MB; questo supera il limite di dimensione del file di GitHub di 100 MB

Ho seguito i passaggi sotto “risolvere il problema” elencati su GitHub help quindi non dovrebbe essere stato sufficiente?

Come è il file ancora nell’etere quando non è locale o elencato in git status / diff / push?

Puoi usare

 git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch ' HEAD 

Questo cancellerà tutto nella cronologia di quel file. Il problema è che il file è presente nella cronologia.

Se il file è stato aggiunto con il tuo commit più recente e non lo hai inviato a GitHub , puoi eliminare il file e modificare il commit, Preso da qui :

 git rm --cached giant_file # Stage our giant file for removal, but leave it on disk git commit --amend -CHEAD # Amend the previous commit with your change # Simply making a new commit won't work, as you need # to remove the file from the unpushed history as well git push # Push our rewritten, smaller commit 

Ho avuto un problema simile e ho utilizzato il passaggio precedente per rimuovere il file. Ha funzionato perfettamente.

Ho quindi ricevuto un errore su un secondo file che dovevo rimuovere: remote: error: File is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB remote: error: File is 109.99 MB; this exceeds GitHub's file size limit of 100.00 MB

Ho provato lo stesso passo, ho ricevuto un errore: "A previous backup already exists in "

Dalla ricerca su questo sito ho usato il comando: git filter-branch --force --index-filter "git rm --cached --ignore-unmatch " --prune-empty --tag-name-filter cat -- --all

Ha funzionato benissimo e i file di grandi dimensioni sono stati rimossi.

Incredibilmente, la spinta non è riuscita ancora con un altro errore: error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal: The remote end hung up unexpectedly error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal: The remote end hung up unexpectedly

Questo ho risolto modificando direttamente il file di configurazione .git – postBuffer = 999999999

Dopo che la spinta è passata attraverso!

Ho trovato lo schiacciamento più utile del filter-branch . Ho fatto quanto segue:

  1. Elimina localmente file di grandi dimensioni.
  2. Configura le eliminazioni locali.
  3. Soft reset indietro X numero di commit (per me era 3): git reset --soft HEAD~3
  4. Quindi riprendi tutte le modifiche insieme (AKA squash) git commit -m "New message for the combined commit"
  5. Premi il commit schiacciato.

Perché GitHub rifiuta il mio repository, anche dopo aver eliminato il file grande?

Git memorizza la cronologia completa del tuo progetto, quindi anche se “cancelli” un file dal tuo progetto, il repository Git ha ancora una copia del file nella sua storia, e se provi a spingere su un altro repository (come quello ospitato su GitHub), quindi Git richiede che il repository remoto abbia la stessa cronologia del repository locale (ovvero gli stessi file di grandi dimensioni nella sua cronologia).

Come posso ottenere che GitHub accetti il ​​mio repo?

Devi pulire la cronologia Git del tuo progetto localmente, rimuovendo i grossi file indesiderati da tutta la cronologia e quindi utilizzare solo la cronologia “pulita” in futuro. Gli ID commit Git dei commit interessati cambieranno.

Come pulisco i grandi file dal mio repo Git?

Lo strumento migliore per la pulizia di file di grandi dimensioni indesiderati dalla cronologia di Git è BFG Repo-Cleaner : è un’alternativa più semplice e veloce a git-filter-branch appositamente progettata per rimuovere i file indesiderati dalla cronologia di Git.

Segui attentamente le istruzioni per l’ uso , la parte principale è proprio questa:

 $ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git 

Tutti i file di dimensioni superiori a 100 MB (che non sono nell’ultimo commit) verranno rimossi dalla cronologia del repository Git. Puoi quindi utilizzare git gc per eliminare i dati morti:

 $ git gc --prune=now --aggressive 

Il BFG è in genere almeno 10-50 volte più veloce rispetto a git-filter-branch e generalmente è molto più facile da usare.

Divulgazione completa: sono l’autore di BFG Repo-Cleaner.

Ho avuto lo stesso problema e nessuna delle risposte funziona per me. Ho risolto i seguenti passaggi:

1. Trova quale commit (s) contiene il file di grandi dimensioni

 git log --all -- 'large_file` 

Il commit inferiore è il commit più vecchio nell’elenco dei risultati.

2. Trova quello appena prima del più vecchio.

 git log 

Supponiamo che tu abbia:

 commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32 

3. Git rebase

 git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32 

Suggerimenti :

  1. Elemento dell’elenco
  2. Ho appena scelto di drop per i commit contiene il file di grandi dimensioni.
  3. Potresti incontrare conflitti durante la correzione di rebase e usare git rebase --continue – continua a continuare fino a quando non lo completi.
  4. Se qualcosa è andato storto durante rebase usa git rebase --abort per cancellarlo.