2014-08-28 28 views
8

Con git versione 1.7.1, sto cercando di escludere tutti i file tranne i file .php.Cosa significa! */Significa in .gitignore

La soluzione di lavoro che ho trovato si basa sul comando !*/

# Ignore Everything 
* 

# Except these files 
!.gitignore 
!*/ 
!*.php 

Senza il !*/, che include solo i file *.php nella directory principale. Che cosa fa funzionare lo standard !*/?

+3

'' Non ignorare '*' tutto in questa directory '/' che termina con un! barra. Aka non ignora le sottodirectory. – Sammitch

risposta

11

Date un'occhiata al documentation of gitignore

un prefisso optional "!" che nega il modello; qualsiasi file corrispondente escluso da un modello precedente verrà nuovamente incluso. Non è possibile includere nuovamente un file se una directory principale di quel file è esclusa . Git non elenca le directory escluse per motivi di prestazioni, , quindi nessun modello sui file contenuti non ha alcun effetto, non importa dove sono definiti. Inserisci una barra rovesciata ("\") davanti al primo "!" per i modelli che iniziano con un letterale "!", ad esempio, "! important! .txt".

+0

In precedenza, mi mancava la parte critica di questo paragrafo ... "Non è possibile includere nuovamente un file se viene esclusa una directory principale di quel file." Grazie! – bitsoflogic

+0

Nessun problema :) Sono contento di aver aiutato – Bijan

9

Ecco la mia linea di pensiero:

La ignorare dichiarazione * ignorerà tutto per impostazione predefinita, compresa la directory principale e tutto il suo contenuto.

Quindi a questo punto, tutti i file e le cartelle nella directory principale vengono ignorati.

Il comando !*.php sarà nuovamente includere tutti i file *.php nel percorso principale, ma le cartelle sono ancora in corso ignorati (perché non finiscono in .php) - e quindi, non sono negati dalla gitignore ancora.

Quindi il comando !*/ include nuovamente tutte le directory (e le sottodirectory successive) in modo che possano essere esaminate per i file *.php. Esempio: folder1/ corrisponde la dichiarazione negazione !*/ perché contiene la / alla fine e il nome della cartella si adatta l'operatore jolly *

+0

Questo ha senso per me, tranne: non sarebbe che la riga '! * /' Debba venire _prima_ la riga '* .php', quindi git può vedere le directory in cui cercare per i file php? Oppure l'ordine non ha alcun effetto in '.gitignore'? –

+0

@JacobFord Corretto - i documenti specificano uno schema precedente e i file '.gitignore' vengono letti dall'alto verso il basso (altrimenti, come si determinerebbe un modello precedente?) Le cartelle non sarebbero conosciute con'! *. Php' se è venuto prima di '! * /'. Questo non era il fulcro della domanda in questione. Puoi pensare al file '.gitignore' come una canalizzazione. – sjagr

+0

Il mio male! Sembrava che la tua risposta implicasse che '! *. Php' sarebbe arrivato prima di'! */', Ma ora vedo che stavi solo spiegando in questo ordine. –