git ignoriert alle Dateien eines bestimmten Typs, außer denen in einem bestimmten Unterordner

192

Ich habe eine Verzeichnisstruktur wie diese:

  • Wurzel
    • Ordner1
      • abc.json
      • def.json
      • irgendwann
        • more.json
    • Ordner2
      • qwe.json
      • rty.json
    • spec
      • mock1.json
      • mock2.json
      • irgendwann
        • more_mocks.json

Mit a .gitignoremöchte ich jetzt alle *.jsonDateien außer denen in ignorieren spec. Ich möchte kein .gitignoreIn verwenden folder1und folder2weil es eine Menge davon gibt und sie zu einer Menge hinzugefügt werden, und ich bin sicher, ich werde vergessen, die richtige .gitignoreDatei an Ort und Stelle zu verschieben.

Darüber hinaus gibt es möglicherweise mehr verschachtelte Verzeichnisse mit JSON-Dateien, und diese Regel muss auch für alle Unterverzeichnisse gelten.

Wie ignoriere ich also alle Dateien eines Typs mit Ausnahme eines bestimmten Unterverzeichnisses?

Alex Wayne
quelle

Antworten:

302

Ein optionales Präfix, !das das Muster negiert. Alle übereinstimmenden Dateien, die von einem vorherigen Muster ausgeschlossen wurden, werden wieder aufgenommen. Wenn ein negiertes Muster übereinstimmt, überschreibt dies Musterquellen mit niedrigerer Priorität.

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

*.json
!spec/*.json
Bernstein
quelle
4
Sie können der Spezifikation auch einen .gitignore hinzufügen, der! / *. Json enthält, wenn Sie dies bevorzugen.
David Mitchell
2
Vielen Dank! Obwohl mir in meinem Fall klar wurde, dass ich überhaupt nichts in meinem Spezifikationsverzeichnis ignorieren möchte. So komme ich mit einem sehr einfachen davon !spec. Klappt wunderbar.
Alex Wayne
7
Während Bernsteins Antwort funktioniert, wenn spec ein Verzeichnis unter der obersten Ebene ist (dh / spec), funktioniert es für mich nicht, wenn spec ein Unterverzeichnis ist, z. B. / a / spec oder a / b / spec. Mit Git 1.7.5.4
Peter Lewis
7
@PeterLewis (für zukünftige Besucher): Ein solcher Fall kann durch Erstellen einer Gitignore-Datei im entsprechenden Unterverzeichnis behandelt werden.
cmbuckley
3
Diese Lösung ignorierte für mich nur die jsonDateien specdirekt, nicht die im somedirUnterverzeichnis der Frage. Ich musste verwenden !spec/**/*.json, um sicherzustellen, dass das auch more_mocks.jsonbegangen wurde.
Leith