Rimuovi file di grandi dimensioni da diversi commit fa (in git)


6

Avevo effettuato diversi commit locali sul mio codebase e ho provato a inviarlo al mio repository, ma c'erano molti file di grandi dimensioni. Ho semplicemente rinunciato e ho continuato a lavorare, impegnandomi a livello locale. Ho eliminato i file di grandi dimensioni ora e ho eseguito nuovamente il commit, ma sta ancora cercando di inviare i file di grandi dimensioni originali. Ho provato ad aggiungere un gitignore dopo averli commessi originariamente per ignorare qualsiasi file oltre i 50 MB, inutilmente.

Qualche idea?

Risposte:


11

Leggi qui su filtro-ramo.

Qualcuno commette accidentalmente un enorme file binario con un'aggiunta sconsiderata git. E vuoi rimuoverlo ovunque. Forse hai accidentalmente impegnato un file che conteneva una password e vuoi rendere il tuo progetto open source. filtro-ramo è lo strumento che probabilmente si desidera utilizzare per cancellare l'intera cronologia. Per rimuovere un file chiamato passwords.txt dalla tua intera cronologia, puoi usare l'opzione --tree-filter per filtrare-branch:

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten

Puoi anche fare un rebase interattivo sul tuo ramo nel punto in cui hai eseguito il commit di quei file e rimuoverli da quel commit. Il link sopra spiega anche questo, ma sostanzialmente:

git rebase -i HEAD~X

ti permetterà di modificare gli ultimi X commit.


Ho un sacco di file di grandi dimensioni, però, e sembra che ci vorrebbe un po 'così.
Gentatsu,

Immagino che intendi con il ramo del filtro a causa dei numerosi file. Non puoi usare una regex per raggiungerli tutti? Quindi forse la seconda opzione (rebasing) è più facile perché puoi andare a quel commit ed eliminare i file dal sistema nello stesso modo in cui li hai cancellati alrerady
ladorm

Non avrebbe un effetto sui miei file attuali, però? Non verrebbero cambiati anche loro o dovrei unirli?
Gentatsu,

Se non tocchi i tuoi file, questi non cambieranno. Il rebase riporta i tuoi file nella cronologia al punto di quel commit e inizia a riapplicare i tuoi commit. Si interrompe sul commit che hai contrassegnato per la modifica. Su quel commit devi rimuovere quei file, e quindi eseguire il commit con 'git commit --ammend' (è sul link che ti ho dato). Questo modifica il tuo commit e poi riprendi il rebase e inizia ad applicare il resto dei tuoi commit
ladorm

Dimenticato questo! Ho fatto un rebase e ho semplicemente eliminato tutti i miei commit, incluso il nuovo file ignore, e ha funzionato.
Gentatsu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.