Lassen Sie .gitignore alles außer ein paar Dateien ignorieren

1700

Ich verstehe, dass eine Gitignore-Datei bestimmte Dateien aus der Versionskontrolle von Git verbirgt. Ich habe ein Projekt (LaTeX), das während der Ausführung viele zusätzliche Dateien (.auth, .dvi, .pdf, Protokolle usw.) generiert, aber ich möchte nicht, dass diese nachverfolgt werden.

Ich bin mir bewusst, dass ich es schaffen könnte (vielleicht sollte), damit all diese Dateien in einem separaten Unterordner im Projekt abgelegt werden, da ich den Ordner dann einfach ignorieren könnte.

Gibt es jedoch eine Möglichkeit, die Ausgabedateien im Stammverzeichnis des Projektbaums zu belassen und mit .gitignore alles außer den Dateien zu ignorieren, die ich mit Git verfolge? Etwas wie

# Ignore everything
*

# But not these files...
script.pl
template.latex
# etc...
Andrew
quelle
12
Duplikat von stackoverflow.com/q/9162919/321973 (Ich weiß, dass das neuer ist, aber die Antwort dort ist korrekter). Eigentlich ist diese Antwort wahrscheinlich die beste
Tobias Kienzler

Antworten:

2442

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.

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# ...even if they are in subdirectories
!*/

# if the files to be tracked are in subdirectories
!*/a/b/file1.txt
!*/a/b/c/*
Joakim Elofsson
quelle
14
Es sieht so aus, als würde dies auch Unterordner "ignorieren", so dass Dateien mit dem Namen "script.pl" in etwas anderem als dem Stammverzeichnis sowieso nicht gefunden werden. Ich benutze dies jetzt (mit * .pl) und alle * .pl-Dateien werden ignoriert, obwohl es viele in den Unterverzeichnissen unter der .gitignore-Datei gibt
PandaWood
38
@PandaWood Dieses Problem wurde hier angesprochen (stackoverflow.com). Es wird durch den ersten Ausdruck verursacht, der mit allem übereinstimmt, einschließlich Verzeichnissen, die Sie niemals negieren. Fügen Sie zum Korrigieren (! * /) Hinzu, das mit allen Unterverzeichnissen (rekursiv) im aktuellen Verzeichnis übereinstimmt. Dies hilft der übergeordneten Antwort nicht, bei der bestimmte Dateien auf die Whitelist gesetzt werden (wenn sie sich in Unterverzeichnissen befinden, möchten Sie wahrscheinlich den vollständigen Pfad manuell angeben oder verzeichnisspezifische Gitignore-Dateien verwenden).
Simont
40
Ich konnte das nicht zum Laufen bringen. Ich ignoriere einen Ordner (z. B. wp/), möchte aber einige Dateien, die sich tief in diesem Ordner befinden (z wp/path/to/some/location/*. B. ) , NICHT ignorieren . Der einzige Weg, wie ich es zum git add -f wp/path/to/some/location/*
Laufen
13
@trusktr Verwenden Sie simonts !*/Ausnahme
Tobias Kienzler
7
!*/Meine Güte , diese letzte Regel: macht den Unterschied in meinen vergeblichen Versuchen, eine .gitignoreDatei zum Laufen zu bringen. Vielen Dank.
racl101
628

Wenn Sie den gesamten Inhalt eines Verzeichnisses mit Ausnahme einer darin enthaltenen Datei ignorieren möchten, können Sie für jedes Verzeichnis im Dateipfad ein Regelpaar schreiben. ZB .gitignore, um den pippo-Ordner mit Ausnahme von pippo / pluto / paperino.xml zu ignorieren

.gitignore

pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml
Giuseppe Galano
quelle
58
Ausgezeichnete Antwort, aber es ist erwähnenswert, für jemand über diese kommen später foound foo/*sind nicht gleich. Damit dies funktioniert, Sie müssen verwenden foo/*für den Basisordner
thislooksfun
20
@ Mayank Pippo ist Goofy auf Italienisch, während Paperino Donald Duck ist und Pluto das gleiche wie auf Englisch. Früher waren sie ein sehr verbreitetes Triplett von Variablennamen für die Programmierung von Samples. Es war schön, sie noch einmal zu lesen .. :)
Ghidello
Was @thislooksfun sagt, ist wichtig, wenn Sie "einen Ordner außer Datei x ausschließen" möchten.
Czechnology
8
funktioniert bei mir nicht: node_modules / *! node_modules / bootstrap
SuperUberDuper
1
@simple_human Das wäre wahr, wenn er alles im Repository-Stamm ignorieren würde oder wenn er eine .gitignore-Datei in den genannten Verzeichnissen hätte, um die er sich kümmern müsste.
xZero
245

Sie möchten /*anstelle von *oder */in den meisten Fällen verwenden

Die Verwendung *ist gültig, funktioniert jedoch rekursiv. Von da an wird es nicht mehr in Verzeichnisse schauen. Die Leute empfehlen !*/, Verzeichnisse erneut auf die Whitelist zu setzen, aber es ist tatsächlich besser, den Ordner der höchsten Ebene mit einer schwarzen Liste zu versehen/*

# Blacklist files/folders in same directory as the .gitignore file
/*

# Whitelist some files
!.gitignore
!README.md

# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log

# Whitelist folder/a/b1/ and folder/a/b2/
# trailing "/" is optional for folders, may match file though.
# "/" is NOT optional when followed by a *
!folder/
folder/*
!folder/a/
folder/a/*
!folder/a/b1/
!folder/a/b2/
!folder/a/file.txt

# Adding to the above, this also works...
!/folder/a/deeply
/folder/a/deeply/*
!/folder/a/deeply/nested
/folder/a/deeply/nested/*
!/folder/a/deeply/nested/subfolder

Der obige Code würde alle Dateien außer ,, und und alles , was in diesen letzten beiden Ordnern enthalten .gitignoreist README.md, ignorieren . (Und und Dateien werden in diesen Ordnern ignoriert.)folder/a/file.txtfolder/a/b1/folder/a/b2/.DS_Store*.log

Natürlich könnte ich zB !/folderoder !/.gitignoreauch tun .

Weitere Informationen: http://git-scm.com/docs/gitignore

Ryan Taylor
quelle
3
Sehr klug, danke. IMO, dies ist der beste Weg, um dies für WordPress-Sites mit der minimalen Anzahl von Einschlussregeln zu tun. Außerdem werden neue Plugins, Themes oder WP-Updates ohne Ihre ausdrückliche Genehmigung nicht entfernt oder hinzugefügt. Bei der Verwendung von GitHub Desktop werden .DS_StoreDateien nicht ignoriert, aber über die Befehlszeile ist dies kein Problem. Um dies zu umgehen, musste ich die **/.DS_Storefolgenden Regeln verschieben.
Jibran
7
Mein innerer Syntax-Textmarker reagiert seltsam auf den Titel Ihres Beitrags.
Itsadok
3
Gracias! Sie können auch eine Datei in einem Ordner auf die Whitelist setzen ..! /some/folder/file.txt
PodTech.io
Genial, die Verwendung von / * anstelle von * hat alle meine Probleme behoben, wenn die obigen Antworten dies nicht taten. Meine einzige Frage ist jetzt, was ist der Unterschied zwischen! / Folder und! / Folder / *? Wenn ich den Ordner! / Ohne * verwende, werden nach wie vor Änderungen an allen Dateien im Ordner erfasst, soweit ich das beurteilen kann.
Dallin
1
@ Dallas gibt es keinen Unterschied. Eine Whitelist führt einen Ordner auf und die andere Whitelist die untergeordneten Elemente dieses Ordners, was dasselbe tut. Das einzige Problem ist ein Ordner oder Dateien des übergeordneten weiße Liste gesetzt werden muss , bevor es die weiße Liste gesetzt werden kann, so dass Sie nicht tun können , /*dann !/nested/folder/*(oder das Äquivalent !/nested/folder) , ohne dabei !/nested/oder !/nestedzuerst! (und wahrscheinlich /nested/*dazwischen). Ein Trick, an den Sie sich erinnern sollten, ist, wenn Sie einen tief verschachtelten Unterordner auf die Whitelist setzen, müssen Sie die Kinder in jedem Unterordner ganz nach oben schwärzen, und diese schwarzen Listen enden mit dem "Schrägstrich" ...
Ryan Taylor
75

Ein bisschen genauer:

Beispiel: Alles ignorieren webroot/cache- aber behalten webroot/cache/.htaccess.

Beachten Sie den Schrägstrich (/) nach dem cacheOrdner:

FEHLER

webroot/cache*
!webroot/cache/.htaccess

WERKE

webroot/cache/*
!webroot/cache/.htaccess
Nik
quelle
Wenn Sie VS-Code verwenden, achten Sie darauf, die Dateifarbe nicht falsch zu lesen, nachdem Sie sie auf einen Ordner mit .gitkeep angewendet haben, da der Ordnername grün wird, die .gitkeep-Datei jedoch grau wird, genau wie alle anderen ignorierten Dateien. .gitkeep sieht so aus, als würde es ignoriert, aber Sie sollten sehen, dass sich auf der rechten Seite ein 'U' befindet, das anzeigt, dass es erkannt wurde
OzzyTheGiant
55
# ignore these
*
# except foo
!foo
Suvesh Pratapa
quelle
28

Um einige Dateien in einem Verzeichnis zu ignorieren, müssen Sie dies in der richtigen Reihenfolge tun :

Ignorieren Sie beispielsweise alles im Ordner "application" außer index.php und Ordner "config" und achten Sie auf die Reihenfolge .

Sie müssen negieren wollen, was Sie zuerst wollen.

FEHLER

application/*

!application/config/*

!application/index.php

WERKE

!application/config/*

!application/index.php

application/*

slatunje
quelle
38
Falsch. Sie negieren nach dem "alles ignorieren".
Carlos
2
Lassen Sie sich nicht täuschen, um git statuszu überprüfen, ob Ihre Änderungen .gitignorewie erwartet funktionieren
Philippe Rathé,
10
Wenn git statusSie nicht wissen, worauf es ankommt und was ignoriert wird, wie können Sie dann wissen, ob dies funktioniert?
Kris
1
@kris Leere zuerst den Git-Cache. Führen Sie zuerst ein "git rm --cached *" aus, dann können Sie ein "git add --all" ausführen. Dann zeigt Ihnen ein "git status" alle neuen gitignore-Änderungen an.
Mark McCorkle
20

Sie können verwenden git config status.showUntrackedFiles nound alle nicht verfolgten Dateien werden vor Ihnen ausgeblendet. Siehe man git-configfür Details.

Robert Munteanu
quelle
Dies ist großartig, wenn Sie nur ein paar von vielen Dateien festschreiben möchten!
Josh M.
16

Um einen Ordner von .gitignore auszuschließen, können Sie Folgendes tun.

!app/

app/*
!app/bower_components/

app/bower_components/*
!app/bower_components/highcharts/

Dadurch werden alle darin enthaltenen Dateien / Unterordner mit bower_componentsAusnahme von ignoriert /highcharts.

Guy Baskin
quelle
14

Es gibt eine Reihe ähnlicher Fragen dazu, daher werde ich das posten, was ich zuvor geschrieben habe:

Die einzige Möglichkeit, dies auf meiner Maschine zum Laufen zu bringen, bestand darin, es folgendermaßen zu tun:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
*.*

#Only Include these specific directories and subdirectories and files if you wish:
!wordpress/somefile.jpg
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*

Beachten Sie, wie Sie Inhalte für jede Ebene, die Sie einschließen möchten, explizit zulassen müssen. Wenn ich also Unterverzeichnisse 5 tief unter Themen habe, muss ich das noch formulieren.

Dies ist aus @ Yarins Kommentar hier: https://stackoverflow.com/a/5250314/1696153

Dies waren nützliche Themen:

Ich habe es auch versucht

*
*/*
**/**

und **/wp-content/themes/**

oder /wp-content/themes/**/*

Nichts davon hat auch für mich funktioniert. Viel Spur und Irrtum!

Katie
quelle
2
Dies ist die einzige Methode, mit der bestimmte Dateierweiterungen ausschließlich eingeschlossen werden. Noch besser, es macht großartige ASCII-Kunst: gist.github.com/Wolfgange3311999/91c671f5e4d3c56cf5a1
Matthew D. Scholefield
10

Ich hatte ein Problem mit dem Unterordner.

Funktioniert nicht:

/custom/*
!/custom/config/foo.yml.dist

Werke:

/custom/config/*
!/custom/config/foo.yml.dist
Fabian Picone
quelle
9

Ich habe alle Antworten wie oben angegeben ausprobiert, aber keine hat für mich funktioniert. Nach dem Lesen der Gitignore-Dokumentation ( hier ) ich fest, dass die Dateinamen im Unterordner nicht indiziert werden, wenn Sie zuerst einen Ordner ausschließen. Wenn Sie also das Ausrufezeichen anschließend verwenden, um eine Datei einzuschließen, wird sie nicht im Index gefunden und daher nicht in Ihrem Git-Client enthalten.

Auf diese Weise konnte die Lösung gefunden werden. Ich begann damit, Ausnahmen für alle Unterordner in meinem Ordnerbaum hinzuzufügen, damit es funktioniert, was eine verdammt gute Arbeit ist. Danach konnte ich die detaillierte Konfiguration auf die folgende Konfiguration komprimieren, was der Dokumentation etwas widerspricht.

Working .gitignore:

# Ignore the 'Pro' folder, except for the '3rdparty' subfolder 
/Pro/*
!Pro/3rdparty/

# Ignore the '3rdparty' folder, except for the 'domain' subfolder
/Pro/3rdparty/*
!Pro/3rdparty/domain/

# Ignore the 'domain' folder, except for the 'modulename' subfolder
Pro/3rdparty/domain/*
!Pro/3rdparty/domain/modulename/

Als Ergebnis sehe ich in meinem Git-Client, dass nur die beiden Dateien im Ordner Pro / 3rdparty / domain / modulename / für das nächste Commit bereitgestellt werden, und genau das habe ich gesucht.

Wenn Sie mehrere Unterordner desselben Ordners auf die Whitelist setzen müssen, gruppieren Sie die Ausrufezeichen unter der Ausschlussanweisung wie folgt:

# Ignore the 'Pro' folder, except for the '3rdparty' subfolder 
/Pro/*
!Pro/3rdparty/

# Ignore the '3rdparty' folder, except for the 'domain' & 'hosting' subfolders
/Pro/3rdparty/*
!Pro/3rdparty/domain/
!Pro/3rdparty/hosting/

# Ignore the 'domain' folder, except for the 'modulename' subfolder
Pro/3rdparty/domain/*
!Pro/3rdparty/domain/modulename/

# Ignore the 'hosting' folder, except for the 'modulename' subfolder
Pro/3rdparty/hosting/*
!Pro/3rdparty/hosting/modulename/

Sonst funktioniert es nicht wie erwartet.

Tim B.
quelle
Endlich eine Antwort, die funktioniert hat. Ich frage mich, wann ich verstehen werde, wie .gitignore tatsächlich funktioniert
David
8

Das hat bei mir funktioniert, ich wollte nur ein Cordova-Plugin für das Repo festlegen:

...
plugins/*
!plugins/cordova-plugin-app-customization
Dmitry Sokurenko
quelle
8

Ich weiß, dass ich zu spät zur Party komme, aber hier ist meine Antwort.

Wie @Joakim sagte, um eine Datei zu ignorieren, können Sie etwas wie das Folgende verwenden.

# Ignore everything
*

# But not these files...
!.gitignore
!someFile.txt

Wenn sich die Datei jedoch in verschachtelten Verzeichnissen befindet, ist es etwas schwierig, die Regeln manuell zu schreiben.

Zum Beispiel, wenn wir alle Dateien in einem gitProjekt überspringen möchten , aber nicht a.txtdie, in denen sich befindet aDir/anotherDir/someOtherDir/aDir/bDir/cDir. Dann wird unser .gitignoreWille so etwas sein

# Skip all files
*

# But not `aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt`
!aDir/
aDir/*
!aDir/anotherDir/
aDir/anotherDir/*
!aDir/anotherDir/someOtherDir/
aDir/anotherDir/someOtherDir/*
!aDir/anotherDir/someOtherDir/aDir/
aDir/anotherDir/someOtherDir/aDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/
aDir/anotherDir/someOtherDir/aDir/bDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/
aDir/anotherDir/someOtherDir/aDir/bDir/cDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

Das oben angegebene .gitignore Datei überspringt alle Verzeichnisse und Dateien außer!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

Wie Sie vielleicht bemerkt haben, ist es schwierig, diese Regeln zu definieren.

Um diese Hürde zu lösen, habe ich eine einfache Konsolenanwendung namens git-do-not-ignore erstellt, die die Regeln für Sie generiert. Ich habe das Projekt in Github mit detaillierten Anweisungen gehostet .

Anwendungsbeispiel

java -jar git-do-not-ignore.jar "aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt"

Ausgabe

!aDir/
aDir/*
!aDir/anotherDir/
aDir/anotherDir/*
!aDir/anotherDir/someOtherDir/
aDir/anotherDir/someOtherDir/*
!aDir/anotherDir/someOtherDir/aDir/
aDir/anotherDir/someOtherDir/aDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/
aDir/anotherDir/someOtherDir/aDir/bDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/
aDir/anotherDir/someOtherDir/aDir/bDir/cDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

Es gibt auch eine einfache Web - Version hier

Vielen Dank.

theapache64
quelle
7

Ich habe Jquery und Angular von der Laube. Bower installierte sie in

/public_html/bower_components/jquery/dist/bunch-of-jquery-files
/public_html/bower_components/jquery/src/bunch-of-jquery-source-files
/public_html/bower_components/angular/angular-files

Die minimierte Abfrage befindet sich im distVerzeichnis und der Winkel befindet sich im angularVerzeichnis. Ich brauchte nur minimierte Dateien, um sie auf github zu übertragen. Einige Manipulationen an .gitignore und das ist es, was ich zaubern konnte ...

/public_html/bower_components/jquery/*
!public_html/bower_components/jquery/dist
/public_html/bower_components/jquery/dist/*
!public_html/bower_components/jquery/dist/jquery.min.js
/public_html/bower_components/angular/*
!public_html/bower_components/angular/angular.min.js

Hoffe, jemand könnte dies nützlich finden.

Mario Legenda
quelle
7

So habe ich es gemacht:

# Ignore everything
*

# Whitelist anything that's a directory
!*/

# Whitelist some files
!.gitignore

# Whitelist this folder and everything inside of it
!wordpress/wp-content/themes/my-theme/**

# Ignore this folder inside that folder
wordpress/wp-content/themes/my-theme/node_modules

# Ignore this file recursively
**/.DS_Store

Verwenden Sie gig status -udiese Option , um einzelne Dateien in nicht verfolgten Verzeichnissen rekursiv anzuzeigen. Dabei werden git statusnur Ordner angezeigt, die Sie zu der Annahme verleiten könnten, dass alles in ihnen verfolgt wurde

zok
quelle
5

Einfache Lösung , wenn Sie brauchen , um alles außer paar Dateien und einige ignorieren Root - Ordner:

/*
!.gitignore
!showMe.txt
!my_visible_dir

Die Magie befindet sich in /*(wie oben beschrieben) und ignoriert alles im (Stamm-) Ordner, ABER NICHT rekursiv.

d.raev
quelle
4

Ich hatte auch einige Probleme mit der Negation einzelner Dateien. Ich konnte sie festschreiben, aber meine IDE (IntelliJ) beschwerte sich immer über ignorierte Dateien, die verfolgt werden.

git ls-files -i --exclude-from .gitignore

Zeigte die beiden Dateien an, die ich auf diese Weise ausgeschlossen habe:

public/
!public/typo3conf/LocalConfiguration.php
!public/typo3conf/PackageStates.php

Am Ende hat das bei mir funktioniert:

public/*
!public/typo3conf/
public/typo3conf/*
!public/typo3conf/LocalConfiguration.php
!public/typo3conf/PackageStates.php

Der Schlüssel war zuerst die Negation des Ordners typo3conf/ .

Es scheint auch, dass die Reihenfolge der Aussagen keine Rolle spielt . Stattdessen müssen Sie alle Unterordner explizit negieren, bevor Sie einzelne Dateien darin negieren können.

Der Ordner !public/typo3conf/und der public/typo3conf/*Ordnerinhalt sind zwei verschiedene Dinge für .gitignore.

Toller Thread! Dieses Problem hat mich eine Weile gestört;)

Armin
quelle
3

Bisher hat bei mir nichts funktioniert, da ich versucht habe, ein Glas aus lib hinzuzufügen.

Das hat nicht funktioniert:

build/*
!build/libs/*
!build/libs/
!build/libs/myjarfile.jar 

Das hat funktioniert:

build/*
!build/libs
Manish Bansal
quelle
3

Ich habe das zum Laufen gebracht

# Vendor
/vendor/braintree/braintree_php/*
!/vendor/braintree/braintree_php/lib
raftaar1191
quelle
2

Hatte das ähnliche Problem wie OP, aber keine der 10 besten Antworten hat tatsächlich funktioniert .
Ich habe endlich folgendes herausgefunden

Falsche Syntax:

*
!bin/script.sh

Richtige Syntax:

*
!bin
!bin/script.sh

Erklärung von der gitignore-Manpage :

Ein optionales Präfix "!" was das Muster negiert; Alle übereinstimmenden Dateien, die von einem vorherigen Muster ausgeschlossen wurden, werden wieder aufgenommen. Es ist nicht möglich, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist . Git listet aus Leistungsgründen keine ausgeschlossenen Verzeichnisse auf, daher haben alle Muster in enthaltenen Dateien keine Auswirkung, unabhängig davon, wo sie definiert sind.

Erweitertes Beispiel:

$ Baum.

.
├── .gitignore
└── bin
    ├── ignore.txt
    └── sub
        └── folder
            └── path
                ├── other.sh
                └── script.sh

$ cat .gitignore

*
!.gitignore
!bin
!bin/sub
!bin/sub/folder
!bin/sub/folder/path
!bin/sub/folder/path/script.sh

$ git status --untracked-files --ignored

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        bin/sub/folder/path/script.sh

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)
        bin/ignore.txt
        bin/sub/folder/path/other.sh

nothing added to commit but untracked files present (use "git add" to track)
frntn
quelle
1

Kern

# Ignore everything
*

# But not these files...
!script.pl
!template.latex

Und wahrscheinlich enthalten:

!.gitignore

Referenz

Von https://git-scm.com/docs/gitignore :

Ein optionales Präfix " !", das das Muster negiert; Alle übereinstimmenden Dateien, die von einem vorherigen Muster ausgeschlossen wurden, werden wieder aufgenommen. Es ist nicht möglich, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist. Git listet aus Leistungsgründen keine ausgeschlossenen Verzeichnisse auf, daher haben alle Muster in enthaltenen Dateien keine Auswirkung, unabhängig davon, wo sie definiert sind. Setzen Sie einen Backslash (" \") vor das erste " !" für Muster, die mit einem Literal " !" beginnen, z. B. " \!important!.txt".

...

Beispiel zum Ausschließen von allem außer einem bestimmten Verzeichnis foo/bar(beachten Sie /*, dass der Platzhalter ohne Schrägstrich auch alles darin ausschließt foo/bar):

$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
Will Cain
quelle
0

Ich habe anscheinend etwas gefunden, das für mich funktioniert hat und das sonst niemand erwähnt hat.

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# And if you want to include a sub-directory and all sub-directory and files under it, but not all sub-directories
!subdir/
!subdir/**/*

Grundsätzlich scheint es zu negieren, dass ein Unterverzeichnis ignoriert wird. Sie müssen zwei Einträge haben, einen für das Unterverzeichnis selbst !subdir/und einen weiteren, der auf alle Dateien und Ordner darunter erweitert wird!subdir/**/*

Didier A.
quelle