2013-06-01 37 views
33

Utilizzando git per un progetto, ho accidentalmente aggiunto a un grosso file .zip. Non me ne sono accorto fino a quando non ho iniziato a caricarlo su github. Quando ho notato, ho colpito ctrl-c, git remove, git commit e lo ho caricato di nuovo (ora con il file non tracciato).Rimuovere completamente un file dall'intero repository git

So che questa non era la scelta giusta da fare, perché una volta che ho commesso lo .zip, rimane nel repository finché non ripristino il commit, ma purtroppo non l'ho fatto.

Ora, quando qualcuno tenta di scaricare dal repository, ci vuole un sacco di tempo per farlo, a volte produce git the remote end hung up unexpectedly (che ho letto può essere risolto facendo qualche git config) ed è molto fastidioso.

Il mio punto è: c'è un modo per dire ulteriori richieste di pull/fetch che dimenticano questo specifico file in questa specifica versione di commit?

+2

possibile duplicato del [Completamente rimuovere il file da tutta la cronologia dei commit di repository Git] (http://stackoverflow.com/questions/307828/completely-remove-file-from-all-git-repository-commit-history) –

+1

@Cupcake Grazie per l'heads up :) Puoi vedere che era anche parte della risposta. Le domande non sono identiche in sé, per non dire che IMHO, __questa risposta è molto meglio__, con una migliore documentazione e link utili di tutti quelli forniti in quel duplicato. Inoltre, il tuo aiuto sarebbe stato molto utile _1 anno fa_;) –

risposta

60

Github fornisce un come questo. Ci sono anche altre domande sul StackOverflow che coprono questo

Vedi anche this section of the Pro Git book, un esempio dato c'è:

Per rimuovere un file chiamato passwords.txt dall'intera cronologia, puoi utilizzare l'opzione --tree-filter per filtrare ramo:

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

Dopo la pulizia, si potrebbe anche provare un git gc per comprimere e ripulire per repository ulteriormente.

+0

Wow, non sapeva di 'git gc'. La mia directory dot git si è ridotta da 35M a 20M. – mojuba

+0

dopo questo come potrei impegnarmi? @Paul Dixon – Alper

+0

FWIW, quel primo link (alla pagina GitHub) mi sembra il migliore per me da un longshot (usa il più significativo '--index-filter'; il suo comando ha effetto su tutti i rami e tag (come la domanda), fornisce avvisi pertinenti e descrive fasi di pre e post-cancellazione molto utili). –

Problemi correlati