2013-09-21 17 views
24

Questa è la mia struttura di cartelle:Git Ignora tutto in una directory ad eccezione sottocartelle

data/ 
    .gitignore 
    uploads/ 
     .gitignore 

vorrei impegnare le cartelle ma non i file al loro interno.

Quindi aggiungo un file .gitignore in ogni cartella con il seguente contenuto:

# Ignore everything in this directory 
* 
# Except this file 
!.gitignore 

Il problema è che le partite * anche sulle directory tracce in modo git solo data/.gitignore

risposta

29

La soluzione è abbastanza semplice, aggiungi !*/ ai file .gitignore e solo i file nella cartella corrente saranno ignorate

# Ignore everything in this directory 
* 
# Except this file 
!.gitignore 
# Except folders 
!*/ 
40

Si prega di non uso improprio file .gitignore. Meglio attenersi ai modi predefiniti per fare ciò, in modo che gli sviluppatori possano entrare rapidamente nel tuo progetto.

  1. Aggiungi un file vuoto .gitkeep nelle cartelle che si desidera impegnarsi senza i file
  2. escludere le cartelle, ma non il .gitkeep dal vostro principale file di .gitignore.

    folder/* 
    !folder/.gitkeep 
    

Questo ignora tutti i file in una cartella, ma non il file .gitkeep. Ora la cartella sarà impegnata con il solo file .gitkeep come contenuto.

+0

Cosa abuso è quello? Ha un bisogno perfettamente legittimo e @ nickel715 lo sta risolvendo bene, con un hack di una complessità simile a quella che stai proponendo ... – dangonfast

+2

Perché un '.gitignore' dice a ogni sviluppatore successivo che deve guardare quel file_ solo per vedere nulla che viene ignorato. I file '.gitignore' non sono pensati per essere impostati su qualsiasi directory rispetto alla directory principale. Se lo facessi, allora tutti dovrebbero esaminare tutte le sottocartelle per vedere se c'è qualcosa di ignorato (e scoprire che non c'è nulla di ignorato) per vedere cosa effettivamente finisce nel repository o in una pipeline di distribuzione. Non aggiungere complessità non necessaria per gli sviluppatori successivi, perché sei pigro e non seguire le convenzioni. – kaiser

+1

Ignora ancora le sottodirectory. -1 – CommaToast

-4

Prova questo:

*.* 
!.gitignore 
!*/* 
+0

Questo non funziona per i file senza punto nel nomefile http://pastie.org/10807907 – nickel715

Problemi correlati