Come ignorare i file che si trovano nel repository?


93

Ho un file (config.php), che è già stato assegnato al repository Git, ma voglio ignorarlo localmente, cioè voglio che quel file rimanga nel repository, ma costringo Git a ignorare qualsiasi modifica ad esso.

Ho inserito il file in .gitignore, ma è ancora contrassegnato come modificato e Git sta ancora tentando di eseguire il commit delle modifiche, ogni volta che effettuo il commit di qualcosa. Qualche idea, cosa mi sto perdendo o sbagliando?


per favore aggiungi il tuo file .gitignore - in questo modo potremmo vedere eventuali problemi al riguardo.
Lars

Risposte:


189

Se il file è ancora visualizzato nello stato, anche se è in .gitignore, assicurati che non sia già tracciato.

git rm --cached config.php

Se vuoi semplicemente ignorarlo localmente, puoi anche farlo ignorare dallo stato git:

git update-index --assume-unchanged config.php

1
Ok grazie ! Se unisco il mio ramo con un altro, questo file può creare problemi?
prcaen

1
@ Nimbus147: non dovrebbe essere un problema e qualsiasi modifica su quel file verrà comunque ignorata (cioè non aggiunta / confermata).
VonC

se usi SmartGit, dovresti usare remove per farlo.
Omid-RH

1
C'è un modo per forzare update-index --assume-unchangedil ramo remoto? Mi piacerebbe mantenere il file nel repo, ma non poter essere modificato da altri ma oltretutto non disponibile allo stage.
p014k

1
@ p014k Non che io sappia. Per quel tipo di file, mantengo la versione con un nome diverso, quindi utilizzo un driver del filer di contenuti per generare automaticamente il file corretto (privato) quando necessario. Ad esempio, quel filtro non sarebbe attivo sul palco. Vedi stackoverflow.com/a/54454356/6309 e il collegamento associato.
VonC

6

Ignora file archiviato:

git update-index --assume-unchanged file

Per ripristinare

git update-index --no-assume-unchanged file

Ripristina tutto

git update-index --really-refresh 

Utile. Il ripristino di un file ha funzionato, ma il ripristino di tutto non ha funzionato.
Adem Tepe

4

Se il file è già nel repository, e quindi nell'area Index / Staging, un aggiornamento a .gitignore non cambierà la situazione: continuerà a essere eseguito il commit.

Per rimuovere il file dall'area Index / Staging utilizzare git rm <file>.


Cosa succede se il file è nel repository ma non è ancora organizzato? Sto cercando di ignorare i file * .log, ma li vedo ancora in "Modifiche". Voglio ignorare tutto, cosa fare?
Sandra K

@SandraK se c'è una versione precedente di quel file (filepath / name) già nel repository all'ultimo commit, allora è considerato tracciato - l '' indice 'avrà quel file nei suoi record, e così statuscontinuerà a dirti su quei cambiamenti. Se vuoi ignorare i file * .log, sia per i file precedentemente aggiunti che per quelli attualmente non tracciati, devi git rm *.logaggiornare entrambi e aggiornare il tuo file .gitignore. Controlla prima se alcuni file di log sono effettivamente importanti ... È facile dimenticare quello speciale ;-)
Philip Oakley

-3

Una volta che un file è elencato nel .gitignore non è possibile modificarlo.

Quindi è possibile rimuovere il file dall'elenco in un commit, eseguire il commit delle modifiche nel successivo, quindi aggiungere nuovamente il file all'elenco degli ignorati in un terzo commit in seguito.

Quello che faccio di solito è dividere il file in due, uno che è consentito e posso cambiare, che include il secondo file se esiste, quindi gli sviluppatori possono apportare modifiche alla configurazione nel file ignorato facoltativamente.


1
" Una volta che un file è elencato in .gitignore non puoi cambiarlo " - puoi chiarire, cosa intendi? Ho molti file in molti dei miei .gitignoree li modifico costantemente! Questa è la prima volta, sento qualcuno dire che una volta aggiunto un file a .gitignore, non posso modificarlo.
trejder

1
In realtà ha torto. Puoi cambiarli. Git semplicemente non li carica, o ti dà anche la possibilità di caricarli.
David
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.