2010-12-30 14 views
30

Ho commesso alcuni dati binari di grandi dimensioni in alcuni commit. Da allora ho aggiornato il mio .gitignore, e quei file non sono più impegnati. Ma mi piacerebbe tornare ai vecchi commit e sottrarre selettivamente questi dati dal repository, rimuovendo un paio di directory che avrebbero dovuto essere in .gitignore. Non voglio rimuovere i commit da soli.Elimina dati binari da un repository git dopo il fatto

Come potrei fare per realizzare questo? Il mio metodo preferito sarebbe un modo per applicare retroattivamente le regole .gitignore ai vecchi commit ... una risposta che usa questo metodo sarebbe anche abbastanza utile per gli altri, dal momento che sono sicuro che il mio problema non sia unico. Sarebbe anche rapido da applicare a una soluzione generale, senza molte personalizzazioni specifiche per la struttura di directory unica di ciascun utente.

È possibile, sia il modo semplice che suggerisco sopra, o in qualche modo più complicato?

+5

Vedere [git: per sempre rimuovere file o cartelle dalla cronologia] (http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/) e [Rimuovi file binari di grandi dimensioni dal repository] (https://groups.google.com/forum/#!topic/github/ghXxynyhj0o). Dovrebbero aiutare. – marcog

+1

Googling per 'git remove file from history' avrebbe risolto il tuo problema. A proposito, la ridefinizione di una modifica a .gitignore nella cronologia iniziale e quindi applicare in qualche modo retroattivamente il .gitignore a tutti i commit probabilmente non aiuterà molto, perché a volte i file ignorati vengono intenzionalmente archiviati e non si vorrebbe perdere quelli. –

risposta

11

La soluzione in this answer ha funzionato perfettamente per me:

È anche possibile testare il vostro processo di pulizia con un tool like bfg repo cleaner, come in this answer:

java -jar bfg.jar --delete-files *.{jpg,png,mp4,m4v,ogv,webm} ${bare-repo-dir}; 

(Tranne BFG si assicura che non è così elimina qualsiasi cosa nel tuo ultimo commit , quindi è necessario rimuovere quei file nell'indice corrente e fare un commit "pulito" .Tutti gli altri commit precedenti verranno puliti da BFG)

+3

Avevo una cartella (accidentalmente) con tutti i file binari e con questo: ** java -jar bfg.jar - download della cartella -delete ** il mio repo è arrivato da 250Mb a 20Mb! –

+0

@akauppi - La sua risposta riguarda git. Fa riferimento a uno strumento Java (bfg) che rimuove i file da un repository git basato sull'estensione del nome file. – mwakerman

+0

@mwakerman Ho trovato questo cercando di rimuovere file diversi da java, quindi una soluzione generica .git sarebbe preferibile per me qui. – ryanjdillon

Problemi correlati