Sto cercando di capire più chiaramente la .gitignore
sintassi, e in particolare per quanto riguarda https://github.com/github/gitignore gitignores.
Vedo che la barra iniziale viene utilizzata per abbinare solo i nomi di percorso relativi alla posizione del .gitignore
file (da http://git-scm.com/docs/gitignore ):
Una barra iniziale corrisponde all'inizio del nome del percorso. Ad esempio, "/*.c" corrisponde a "cat-file.c" ma non a "mozilla-sha1 / sha1.c".
Ma cosa succede quando rimuovo la barra principale? Per quanto ho capito, ci sono due casi:
- Se il pattern non contiene una barra (o contiene solo una barra finale, il che significa che deve corrispondere a una directory), la ricerca viene eseguita all'interno dell'intero albero delle directory. Ad esempio, il modello
dir/
corrisponderà<root>/dir
,<root>/a/dir
,<root>/a/b/c/.../dir
, ecc, dove<root>
è la posizione del.gitignore
file. - Se il modello contiene una barra, che non si trova nella posizione finale (non è l'ultimo carattere), viene trovata solo la corrispondenza con i nomi di percorso relativi alla
.gitignore
posizione del file.
Questi sono gli esempi che ho fatto per verificare questo comportamento:
# Directory structure:
<root>
├─ dir/
│ └─ test
├─ src/
│ ├─ dir/
│ │ └─ test
test file is there only because Git does not track empty directories.
Primo test:
# .gitignore
dir/
# git status
nothing to commit
Quindi Git ignora entrambe le dir
directory. Ciò è coerente con il caso numero 1: il pattern non ha barre (eccetto quello finale), quindi Git sta guardando l'intero albero delle directory, ignorando tutto ciò che corrisponde al pattern.
Secondo test:
# .gitignore
/dir/
# git status
Untracked files:
src/
In questo caso, Git ignora solo la dir
directory direttamente sotto la directory root, grazie alla barra iniziale nel pattern.
Terza prova:
# .gitignore
dir/*
# git status
Untracked files:
src/
Questo è coerente con il caso numero 2: il pattern ha una barra al suo interno, quindi è considerato come un percorso a partire dalla directory root.
Adesso è il momento della vera domanda. Consideriamo questo file gitignore : quando ignorano la directory downloader/
, ad esempio, non stanno effettivamente ignorando ogni singola downloader
directory trovata nell'intero albero delle directory? Questo è ciò che sono spinto a pensare da quello che ho visto prima sul funzionamento di Git.
Quindi, se mi capita di avere un modulo personalizzato con una downloader
directory al suo interno, verrà ignorato inaspettatamente così come quello normale nella radice di Magento? Questa è una domanda un po 'retorica perché in realtà mi è già successo, producendo un bug davvero difficile da trovare.
Quindi, nel .gitignore
file Magento (a cui mi riferisco solo a titolo di esempio, btw) molti modelli contengono barre, quindi sono abbinati correttamente ai nomi di percorso che iniziano dalla radice, ma ci sono alcuni casi, come downloader/
o errors/
quello , se non sbaglio, sono potenzialmente pericolosi e che dovrebbero probabilmente essere modificati in /downloader/
e /errors/
.
Come domanda più generale, dovrei sempre usare la barra iniziale per i modelli che non contengono barre (eccetto quella finale) quando voglio selezionare un percorso esplicitamente a partire da root, e non usarlo per modelli contenenti barre, o dovrei usa sempre la barra principale per chiarezza? Cosa ne pensi?
Grazie per la lettura e scusa per il lungo post.