2013-09-21 9 views
24

Dies ist meine Ordnerstruktur:Git alles in einem Verzeichnis ignorieren außer Unterordner

data/ 
    .gitignore 
    uploads/ 
     .gitignore 

Ich mag würde die Ordner begehen, aber nicht in ihnen die Dateien.

So füge ich eine .gitignore Dateien in jedem Ordner mit folgendem Inhalt:

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

Das Problem ist, dass * Matches auch auf Verzeichnisse so git Spuren nur data/.gitignore

Antwort

29

Die Lösung ist ganz einfach, hinzufügen !*/ die .gitignore Dateien und nur Dateien im aktuellen Ordner wird

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

Bitte nicht missbrauchen.gitignore Dateien. Bleiben Sie besser bei den Standardmethoden, damit Entwickler später schnell in Ihr Projekt einsteigen können.

  1. eine leere .gitkeep Datei in den Ordner hinzufügen, die Sie
  2. ausschließen die Ordner, nicht aber die .gitkeep von Ihrem Haupt.gitignore Datei ohne die Dateien begehen wollen.

    folder/* 
    !folder/.gitkeep 
    

Dies ignoriert alle Dateien in einem Ordner, nicht aber die .gitkeep Datei. Jetzt wird der Ordner nur mit der .gitkeep Datei als Inhalt übergeben.

+0

Was Missbrauch ist das? Er hat ein vollkommen legitimes Bedürfnis und @ Nickel715 löst es schön, mit einem Hack ähnlicher Komplexität als der, den du vorschlägst ... – dangonfast

+2

Weil ein '.gitignore' jedem späteren Entwickler sagt, dass er/sie schauen muss diese Datei_ nur um nichts zu sehen, das ignoriert wird. '.gitignore' Dateien sind auch nicht auf ein anderes Verzeichnis als das Hauptverzeichnis festgelegt. Wenn Sie dies tun würden, müsste jeder durch alle Unterordner schauen, um zu sehen, ob etwas ignoriert wird (und herausfinden, dass nichts ignoriert wird), um zu sehen, was tatsächlich im Repo oder in einer Deployment-Pipeline endet. Fügen Sie keine unnötige Komplexität für spätere Entwickler hinzu, nur weil Sie faul sind und Konventionen nicht befolgen. – kaiser

+1

Ignoriert weiterhin Unterverzeichnisse. -1 – CommaToast

-4

Versuchen Sie folgendes:

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

Dies funktioniert nicht für Dateien ohne Punkt im Dateinamen http://pastie.org/10807907 – nickel715