2013-07-23 18 views
52

Ho visto domande simili (1, 2 e 3), ma non ottengo una soluzione adeguata da loro.Ignorare tutti i file in modo ricorsivo correttamente in una cartella specifica tranne uno specifico tipo di file

Devo ignorare tutti i file in una cartella particolare tranne per un tipo di file specifico. La cartella è una sottodirectory per il percorso principale. Fammi nominare la cartella Resources. Dal momento che non voglio complicare le cose, lasciatemi ignorare i file in tutte le cartelle denominate Resources ovunque si trovi.

Questa è la soluzione più comune (in tutte le questioni duplicati)

# Ignore everything 
* 

# Don't ignore directories, so we can recurse into them 
!*/ 

# Don't ignore .gitignore 
!.gitignore 

# Now exclude our type 
!*.foo 

Il problema di questa soluzione è che smette di inseguimento di recente aggiunto i file (dal * ignora tutti i file). Non voglio continuare ad escludere ogni tipo di file. Voglio un comportamento normale in cui se viene aggiunto un nuovo file, lo mostra git status.

Ho finalmente trovato una soluzione here. La soluzione è aggiungere un altro file .gitignore nella cartella Resources. Funziona correttamente

È possibile ottenere lo stesso risultato con un file ignorato? Trovo che avere molti ignora i file in diverse directory un po 'goffo.

questo è quello che sto cercando di realizzare:

# Ignore everything under Resources folder, not elsewhere 
Resources 

# Don't ignore directories, so we can recurse into them 
!*Resources/ 

# Now exclude our type 
!*.foo 

Ma questo dà l'uscita opposta. Ignora i tipi *.foo e tiene traccia di altri file.

risposta

70

@SimonBuchan is correct.

Dal git 1.8.2, Resources/** !Resources/**/*.foo opere.

+1

Questo funziona per me, leggermente aggiustato, ho solo bisogno di rimuovere le directory e tutto sotto di loro così ho fatto: 'DirectoryName1/** DirectoryName1/**/*' per ognuno di essi. Gli abeti rimuovono le directory ma è necessario il secondo rimuovere tutti i tipi di file. –

22

La risposta migliore è quella di aggiungere un file Resources/.gitignore sotto Risorse contenente:

# Ignore any file in this directory except for this file and *.foo files 
* 
!/.gitignore 
!*.foo 

Se siete disposti o in grado di aggiungere quel file .gitignore, c'è una soluzione poco elegante:

# Ignore any file but *.foo under Resources. Update this if we add deeper directories 
Resources/* 
!Resources/*/ 
!Resources/*.foo 
Resources/*/* 
!Resources/*/*/ 
!Resources/*/*.foo 
Resources/*/*/* 
!Resources/*/*/*/ 
!Resources/*/*/*.foo 
Resources/*/*/*/* 
!Resources/*/*/*/*/ 
!Resources/*/*/*/*.foo 

Sarà necessario modificare tale modello se si aggiungono le directory più in profondità di quanto specificato.

+2

Questo è vero. Avrò directory più profonde, quindi rimarrò con il primo :( – nawfal

+0

Vedere ulteriori dettagli sulla stessa soluzione qui: http://stackoverflow.com/questions/7803689/gitignore-ignore-all -files-in-folder-hierachy-except-one-specific-filetype - anche linkato sopra da OP @nawfal – here

+30

Da git 1.8.2, 'Resources/**' '! Resources/**/*. foo' funziona –

1

Questo potrebbe sembrare stupido, ma controlla se non hai già aggiunto la cartella/i file che stai cercando di ignorare prima nell'indice. Se lo hai fatto, non importa ciò che hai inserito nel tuo file .gitignore, le cartelle/i file saranno ancora messi in scena.