git ignora tutti i file di un certo tipo, tranne quelli in una specifica sottocartella


194

Ho una struttura di directory come questa:

  • radice
    • cartella1
      • abc.json
      • def.json
      • somedir
        • more.json
    • folder2
      • qwe.json
      • rty.json
    • spec
      • mock1.json
      • mock2.json
      • somedir
        • more_mocks.json

Ora usando un .gitignorevoglio ignorare tutti i *.jsonfile tranne quelli nel file spec. Non voglio usare un .gitignorein folder1e folder2perché ce ne sono molti e questi verranno aggiunti a molti, e sono sicuro che dimenticherò di spostare il .gitignorefile giusto.

Inoltre, potrebbero esserci più directory nidificate con file json e questa regola deve essere applicata anche a tutte le sottodirectory.

Quindi, come posso ignorare tutti i file di un tipo, ad eccezione di una determinata sottodirectory?

Risposte:


304

Un prefisso opzionale !che nega il modello; qualsiasi file corrispondente escluso da un modello precedente verrà nuovamente incluso. Se un modello negato corrisponde, questo sovrascriverà le origini dei modelli con precedenza inferiore.

http://schacon.github.com/git/gitignore.html

*.json
!spec/*.json

4
Puoi anche aggiungere un .gitignore alle specifiche che contengono! / *. Json, se preferisci.
David Mitchell,

2
Grazie! Anche se nel mio caso, mi sono reso conto che non voglio assolutamente ignorare nulla nella mia directory delle specifiche. Quindi sono in grado di cavarmela con un modo molto semplice !spec. Funziona come un fascino.
Alex Wayne,

7
Mentre la risposta di Amber funziona quando spec è una directory di livello superiore (ie / spec), non funziona per me quando spec è una sottodirectory, ad esempio / a / spec o a / b / spec. Usando git 1.7.5.4
Peter Lewis il

7
@PeterLewis (per futuri visitatori): un caso del genere può essere gestito creando un file .gitignore nella relativa sottodirectory.
cmbuckley,

3
Questa soluzione per me ha ignorato solo i jsonfile specdirettamente, non quello nella somedirsottodirectory della domanda. Ho dovuto usarlo !spec/**/*.jsonper assicurarmi che anche l' more_mocks.jsonimpegno fosse eseguito.
Leith il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.