Mantieni i file ignorati fuori dallo stato git


133

Vorrei impedire a Git di mostrare i file ignorati git statusperché avere tonnellate di documentazione e file di configurazione nell'elenco dei file modificati ma non aggiornati rende l'elenco mezzo inutile.

È normale che Git mostri questi file?

Ho inserito le informazioni ignorate in un .gitignorefile nella directory principale del repository Git e non vengono aggiunte durante l'utilizzo, git add .ma sembra che non vengano neppure completamente ignorate, in quanto vengono visualizzate nell'elenco summenzionato e non vengono visualizzate nell'elenco stampato da git ls-files --others -i --exclude-standard. Vengono visualizzati solo i file corrispondenti ai modelli in ~/.gitignore.

Potrebbe essere perché in una fase precedente non li ho ignorati e così sono stati commessi almeno una volta?

Risposte:


231

Come ho trovato in questo post , .gitignorefunziona solo con file non tracciati. Se hai aggiunto file al repository, puoi:

git update-index --assume-unchanged <file>

o rimuoverli dal repository da

git rm --cached <file>

modificare

Questo articolo spiega anche questo


4
update-index ha funzionato per me. Problema simile in cui lo stato git mostra file ignorati ... molto fastidioso. +1
Abe Petrillo,

3
Ho ancora questo problema. Nessuno dei comandi sopra ha funzionato per me. In entrambi i casi, git afferma di non essere a conoscenza dei file in questione, ma vengono comunque visualizzati nello stato git :(
Cfreak,

5
@Cfreak git status -- <file>mostra "Modifiche non messe in scena per il commit" o "File non tracciati" per il tuo file? Il primo è se hai già un file in indice e avrei bisogno di maggiori informazioni per risolvere il tuo problema (meglio creare una domanda separata con i messaggi git mostrati e semplicemente postare un link ad esso nel commento). Il successivo è per i file che non sono tracciati da git (ancora), ma non sono nei .gitignorefile e possono essere aggiunti liberamente all'indice.
MBO

1
@MBO - sì, lo fa. Grazie! Il tuo commento mi ha aiutato a trovare questa risposta: stackoverflow.com/questions/594757/… che ha funzionato per me.
Cfreak,

1
La prima opzione funziona come un fascino. Ho già provato il secondo, e ha causato la messa in scena dei file come "rimossi" e sicuramente non lo volevo.
Carrm,

16

Ho anche riscontrato questo problema, probabilmente perché hai aggiunto la tua directory / file ignorati a .gitignore dopo che sono stati contrassegnati come "da tracciare" da GIT in un flusso di commit iniziale.

Quindi è necessario svuotare la cache di tracciamento git in questo modo:

git rm --cached -r [folder/file name]

Una spiegazione più dettagliata può essere letta qui: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

Il comando sopra ha anche rimosso i resti della cartella / file dall'origine GIT remota. Quindi i tuoi repository GIT diventano puliti.


11

Il problema può essere che questo file è ancora nella cache git. Per risolvere questo problema è necessario ripristinare git cache.

Reimposta git cache. Questo rimuove tutto dall'indice.

git rm -r --cached . 

Aggiungi di nuovo tutti i file:

git add . 

Commettere:

git commit -m ".gitignore was fixed." 

2

Questo sicuramente funziona,

git rm --cached -r [folder/file name]


1

Presumo che tu non voglia aggiungere la directory tmp (Visual Studio Platform)

1- aggiungi le righe sottostanti al tuo file .gitignore locale

## ignore tmp
/tmp/
./tmp/

3- backup ed eliminazione della cartella tmp localmente. (Backup da qualche altra parte. Ad es. Desktop?)

4- Commettere le modifiche su Local piuttosto che su Sync su Remote (es. Github).

Dopo questi passaggi la tua directory tmp non verrà più caricata.


0

Da man git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Personalmente tendo a mantenere i file doxygen nel mio albero dei sorgenti, quindi ho semplicemente aggiunto questo al mio .gitignore (che si trova nella directory più in alto del mio albero dei sorgenti):

docs/*

Spero che aiuti.


0

I seguenti passaggi funzionano solo per i file non tracciati . Queste informazioni sono applicabili per la seguente configurazione:

Platform: linux

Git version: git version 1.8.3.1

Inserisci l'elenco dei file da ignorare nel file "escludi" presente nella seguente posizione.

<path till .git directory>/.git/info/exclude

Contenuto iniziale del file "exclude"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Contenuto finale del file "exclude"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch

0

In base alla risposta accettata, puoi assumere il file come invariato , in modo tale che qualsiasi cosa tu faccia sul tuo computer locale non venga trasferita alla tua filiale remota.

Qualcosa di simile a git update-index --assume-unchanged src/main/resources/config.properties dove src / main.resources / config.properties è un esempio per il percorso per trovare quel file all'interno del progetto.

Ora, se vuoi rimuovere completamente il file dal tuo repository, potresti voler usare remove cachedinvece di `git rm --cached

Questo scenario potrebbe essere applicabile alla seguente situazione:

Supponiamo di avere un file in cui memorizzo le password. Inizialmente ho eseguito il commit di quel file con dettagli errati, così i miei colleghi hanno lo stesso file sui loro computer. Tuttavia, ora ho aggiunto i miei dettagli corretti sul mio computer locale. Come posso impedire che il file venga commesso di nuovo accidentalmente con i dettagli della password ora corretti?


-1

come questo

git --ignored myfolder

E mostrerà lo stato solo per myfolder

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.