C'è un modo per ignorare tutti i file di un tipo in una directory?
**
è apparentemente privo di significato per git, quindi questo non funziona:
/public/static/**/*.js
L'idea è di abbinare cartelle nidificate arbitrarie.
C'è un modo per ignorare tutti i file di un tipo in una directory?
**
è apparentemente privo di significato per git, quindi questo non funziona:
/public/static/**/*.js
L'idea è di abbinare cartelle nidificate arbitrarie.
Risposte:
Mai provato, ma git help ignore
suggerisce che se si mette una .gitignore
con *.js
in /public/static
, farà quello che vuoi.
Nota: assicurati di controllare anche la risposta di Joeys qui sotto: se vuoi ignorare i file in una specifica sottodirectory, un .gitignore locale è la soluzione giusta (la località è buona). Tuttavia, se è necessario applicare lo stesso modello all'intero repository, la soluzione ** è migliore.
Sembrerebbe che la **
sintassi sia supportata dalla git
versione in 1.8.2.1
base alla documentazione .
Due asterischi consecutivi ("
**
") in schemi abbinati a un percorso completo possono avere un significato speciale:
Un "
**
" iniziale seguito da una barra indica la corrispondenza in tutte le directory. Ad esempio, "**/foo
" corrisponde a file o directory "foo
" ovunque, uguale a modello "foo
". "**/foo/bar
" corrisponde al file o alla directory "bar
" ovunque si trovi direttamente nella directory "foo
".Un "
/**
" finale " corrisponde a tutto dentro. Ad esempio, "abc/**
" corrisponde a tutti i file all'interno della directory "abc
", relativamente alla posizione del.gitignore
file, con profondità infinita.Una barra seguita da due asterischi consecutivi, quindi una barra corrisponde a zero o più directory. Ad esempio, "
a/**/b
" corrisponde "a/b
", "a/x/b
", "a/x/y/b
" e così via.Altri asterischi consecutivi sono considerati non validi.
xxx/**
e xxx/
?
xxx/**
prende di mira tutti i file e le directory all'interno di xxx
mentre è xxx/
indirizzata xxx
direttamente alla directory. Questo in realtà è importante solo quando si negano i modelli con !
"Non è possibile includere nuovamente un file se una directory padre di quel file è esclusa", quindi utilizzare xxx/*
o xxx/**
sarebbe necessario in quel caso.
**.js
?
AGGIORNAMENTO: Dai un'occhiata alla risposta di @ Joey : Git ora supporta la **
sintassi negli schemi. Entrambi gli approcci dovrebbero funzionare bene.
La pagina man gitignore (5) afferma:
I pattern letti da un file .gitignore nella stessa directory del percorso o in qualsiasi directory padre, con i pattern nei file di livello superiore (fino al livello superiore dell'albero di lavoro) vengono sovrascritti da quelli nei file di livello inferiore fino alla directory contenente il file.
Ciò significa che i pattern in un .gitignore
file in una determinata directory del repository influiranno su quella directory e su tutte le sottodirectory .
Lo schema che hai fornito
/public/static/**/*.js
non è del tutto corretto, in primo luogo perché (come hai notato correttamente) la **
sintassi non è utilizzata da Git. Inoltre, i principali si /
ancorano a quel modello all'inizio del percorso. (Quindi, /public/static/*.js
corrisponderà /public/static/foo.js
ma non /public/static/foo/bar.js
.) Rimuovere la derivazione EDIT: Anche la semplice rimozione della barra iniziale non funzionerà - poiché il modello contiene ancora una barra, viene trattato da Git come un semplice guscio di shell non ricorsivo (grazie a @Joey Hoer per averlo sottolineato)./
non funzionerà neanche, abbinando percorsi come public/static/foo.js
e foo/public/static/bar.js
.
Come suggerito da @ptyx, quello che devi fare è creare il file <repo>/public/static/.gitignore
e includere solo questo modello:
*.js
Non c'è alcun inizio /
, quindi corrisponderà a qualsiasi parte del percorso e quel modello sarà sempre e solo applicato ai file nella /public/static
directory e nelle sue sottodirectory.
/
non funzionerà neanche, abbinando percorsi come public/static/foo.js
e foo/public/static/bar.js
". è falso. Per citare la documentazione "Se il modello non contiene una barra /, Git lo considera come un modello glob shell e verifica una corrispondenza con il nome percorso relativo alla posizione del file .gitignore (rispetto al livello superiore dell'albero di lavoro se non da un file .gitignore). " foo/public/static/bar.js
non sarebbe abbinato perché il modello contiene a /
.
Per ignorare i file non tracciati basta andare su .git / info / exclude. Escludi è un file con un elenco di estensioni o file ignorati.
Credo che la soluzione più semplice sarebbe quella di utilizzare find
. Non mi piace avere più in .gitignore
giro nelle sottodirectory e preferisco gestire un livello unico e di alto livello .gitignore
. Per fare ciò potresti semplicemente aggiungere i file trovati al tuo .gitignore
. Supponendo che /public/static/
sia il tuo progetto / git home userei qualcosa del tipo:
find . -type f -name *.js | cut -c 3- >> .gitignore
Ho scoperto che tagliare ./
all'inizio è spesso necessario per git per capire quali file evitare. Pertanto il cut -c 3-
.