2010-11-08 16 views
122

Voglio che git smetta di monitorare il mio log di sviluppo locale (log/development.log) nei nostri repository. È possibile e come posso farlo?Rimuovere un file esistente da un Git Repo

+0

possibile duplicato di [Effettuare git "dimenticare" un file che * era * rintracciato ma ora è ".gitignored"] (http://stackoverflow.com/questions/1274057/making-git-forget-about-a -file-that-was-tracked-but-is-now-gitignored) – Cascabel

risposta

138

solo per dare la risposta completa tutto in una volta:

  1. da Klemens: è necessario aggiungere il file al file .gitignore da qualche parte sopra il file indesiderato nel repository. vale a dire

    $ cd $ cat >> .gitignore development.log C-d

  2. da m. narebski: È quindi necessario rimuovere il file dal repo eseguendo "git rm --cached <file> e poi commettere questa rimozione"

Se siete stati anche sperando di rendere il look di pronti contro termine, come se non fosse mai rintracciato quel file, che è molto più complicato e molto scoraggiato in quanto non solo crea nuovi commit per ogni singolo commit nella tua storia, distruggendo così l'interoperabilità in modo sgradevole tra le altre persone che hanno clonato il tuo repository, ma lascia anche nessuno di quei commit non testati (assumendo prova i tuoi commit prima di renderli).

Con questo avvertimento, lo strumento che stai cercando se questo è il tuo obiettivo è filter-branch. Il primo esempio fa esattamente quello che sto descrivendo.

+3

utilizzando git rm --cached sembra non averlo rimosso solo il ramo, ma quando tiro su un altro sistema cancella fisicamente i file su quel sistema. Qualche idea su cosa sta succedendo lì? – biagidp

+2

In risposta a quanto sopra: credo che il problema era che non avevo il .gitignore sul posto nel sistema alternativo prima di eseguire le modifiche, quindi l'eliminazione rimosse la copia locale. Almeno questa è la teoria – biagidp

1

aggiungere il file gitignore.

vedere http://git-scm.com/docs/gitignore

+13

Questa è solo la metà della risposta. Le voci '.gitignore' non si applicano ai file che sono già stati tracciati. –

+10

La seconda parte è 'git rm --cached ' e quindi si comanda questa rimozione. –

+1

Perché non esiste un semplice comando per git per rivalutare tutti i file attualmente tracciati in base al file .gitignore corrente? ... o sta esercitando troppo buon senso? : p – Alexander

51

Per interrompere il rilevamento del file, utilizzare semplicemente git rm --cached <filename>.

Tuttavia, come indicato in precedenza da altri, l'aggiunta del file a .gitignore potrebbe impedire l'aggiunta accidentale in seguito.