gitignore tutti i file di estensione nella directory

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 è quella di abbinare cartelle nidificate arbitrarie.

Mai provato, ma git help ignore suggerisce che se metti un .gitignore con *.js in /public/static , farà quello che vuoi.

Nota: assicurati di controllare anche la risposta di Joey sotto: se vuoi ignorare i file in una sottodirectory specifica, allora 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 ** syntax sia supportata da git partire dalla versione 1.8.2.1 base alla documentazione .

Due asterischi consecutivi (” ** “) in pattern abbinati a pathname completo possono avere un significato speciale:

  • Un ” ** ” iniziale seguito da una barra indica la corrispondenza in tutte le directory. Ad esempio, ” **/foo ” corrisponde al file o alla directory ” foo ” ovunque, lo stesso del modello ” foo “. ” **/foo/bar ” corrisponde a qualsiasi file o directory ” bar ” direttamente nella directory ” foo “.

  • Un ” /** ” finale corrisponde a tutto ciò che è dentro. Ad esempio, ” abc/** ” corrisponde a tutti i file all’interno della directory ” abc “, relativi alla posizione del file .gitignore , 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 ” a/b “, ” a/x/b “, ” a/x/y/b ” e così via.

  • Altri asterischi consecutivi sono considerati non validi.

AGGIORNAMENTO: dai un’occhiata alla risposta di @ Joey : Git ora supporta la ** syntax nei pattern. 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 pattern nei file di livello superiore (fino al livello più alto dell’albero di lavoro) vengono sovrascritti da quelli nei file di livello inferiore fino alla directory contenente il file.

Ciò significa che gli schemi in un file .gitignore in una determinata directory del repository influiranno su quella directory e su tutte le sottodirectory .

Lo schema che hai fornito

 /public/static/**/*.js 

non è giusto, innanzitutto perché (come hai giustamente notato) la ** syntax non è usata da Git. Inoltre, i principali / ancore che si adattano all’inizio del nome del percorso. (Quindi, /public/static/*.js corrisponderà a /public/static/foo.js ma non a /public/static/foo/bar.js .) La rimozione dell’inizio / non funzionerà, percorsi corrispondenti come public/static/foo.js e foo/public/static/bar.js EDIT: Solo la rimozione della barra iniziale non funzionerà – poiché il pattern contiene ancora una barra, viene trattato da Git come un semplice shell globulare non ricorsivo (grazie a @Joey Hoer per averlo indicato).

Come suggerito da @ptyx, ciò che devi fare è creare il file /public/static/.gitignore e includere solo questo modello:

 *.js 

Non esiste un indicatore / , quindi corrisponderà a qualsiasi parte del percorso e tale modello verrà applicato solo ai file nella directory /public/static e nelle relative sottodirectory.

Per ignorare i file non tracciati vai su .git / info / exclude. Escludi è un file con un elenco di estensioni o file ignorati.

Credo che la soluzione più semplice sarebbe usare find . Non mi piace avere più .gitignore giro nelle sottodirectory e preferisco gestire un unico .gitignore primo livello. Per fare ciò potresti semplicemente aggiungere i file trovati al tuo .gitignore . Supponendo che /public/static/ sia il tuo progetto / git home vorrei usare qualcosa come:

 find . -type f -name *.js >> .gitignore