2622 Stimmen

.gitignore ignoriert alles außer ein paar Dateien

Ich weiß, dass eine .gitignore-Datei bestimmte Dateien vor der Git-Version verbirgt Kontrolle. Ich habe ein Projekt (LaTeX), das viele zusätzliche Dateien erzeugt (.auth, .dvi, .pdf, Protokolle usw.) erzeugt, aber ich möchte nicht, dass diese nachverfolgt werden.

Ich bin mir bewusst, dass ich dafür sorgen könnte (oder sollte), dass all diese Dateien in einer separaten Unterordner im Projekt ablegen könnte, da ich den Ordner dann einfach ignorieren könnte.

Gibt es jedoch eine praktikable Möglichkeit, die Ausgabedateien in der Wurzel des Projektbaums zu halten und .gitignore zu verwenden, um alles zu ignorieren, außer den Dateien mit Git verfolge? Etwas wie

# Ignore everything
*

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

20 Stimmen

Duplikat von stackoverflow.com/q/9162919/321973 (Ich weiß, dass das neuer ist, aber die Antwort dort ist richtiger). Eigentlich diese Antwort ist wahrscheinlich die beste

19voto

Guy Baskin Punkte 223

Um einen Ordner aus .gitignore auszuschließen, können Sie wie folgt vorgehen.

!app/

app/*
!app/bower_components/

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

Dies ignoriert alle Dateien/Unterordner innerhalb von bower_components mit Ausnahme von /highcharts .

16voto

Katie Punkte 41284

Es gibt eine ganze Reihe ähnlicher Fragen zu diesem Thema, also poste ich, was ich vorher geschrieben habe:

Auf meinem Rechner konnte ich das nur auf diese Weise erreichen:

# 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, dass Sie für jede Ebene, die Sie einbeziehen möchten, ausdrücklich Inhalte zulassen müssen. Wenn ich also 5 Unterverzeichnisse unter "themes" habe, muss ich das immer noch explizit angeben.

Dies stammt aus dem Kommentar von @Yarin hier: https://stackoverflow.com/a/5250314/1696153

Dies waren nützliche Themen:

Ich habe auch versucht

*
*/*
**/**

y **/wp-content/themes/**

ou /wp-content/themes/**/*

Das hat bei mir auch nicht funktioniert. Viele Versuche und Irrtümer!

2 Stimmen

Dies ist die einzige Methode, die funktioniert, um bestimmte Dateierweiterungen exklusiv einzuschließen. Und was noch besser ist, es ergibt großartige ASCII-Kunst: gist.github.com/Wolfgange3311999/91c671f5e4d3c56cf5a1

0 Stimmen

Der obige Gist-Link funktioniert nicht, aber für Erweiterungen, dies funktioniert - stackoverflow.com/a/69852916/3940047

14voto

zok Punkte 4158

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 -u um einzelne Dateien in nicht verfolgten Verzeichnissen rekursiv anzuzeigen - mit git status Sie würden nur Ordner sehen, die Ihnen vorgaukeln könnten, dass alles, was sich in ihnen befindet, verfolgt wird.

0 Stimmen

Vielen Dank für den Hinweis auf den Parameter -u Ich habe bereits git status verwendet und konnte mich nicht mit den Ignorierregeln anfreunden, da ich falsche nicht verfolgte Ordner und Dateien aufgelistet habe.

12voto

fabpico Punkte 2025

Ich hatte ein Problem mit Unterordnern.

Funktioniert nicht:

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

Werke:

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

11voto

Tim B. Punkte 403

Ich habe alle oben genannten Antworten ausprobiert, aber keine hat mir geholfen. Nach dem Lesen der gitignore-Dokumentation ( aquí ) habe ich herausgefunden, dass die Dateinamen in den Unterordnern nicht indiziert werden, wenn man zuerst einen Ordner ausschließt. Wenn man also das Ausrufezeichen danach benutzt, um eine Datei einzuschließen, wird sie nicht im Index gefunden und somit auch nicht in den Git-Client aufgenommen.

Das war der Weg zur Lösung. Ich begann mit dem Hinzufügen von Ausnahmen für alle Unterordner in meinem Ordnerbaum, um es zum Laufen zu bringen, was eine höllische Arbeit ist. Danach war ich in der Lage, die detaillierte Konfiguration auf die folgende Konfiguration zu reduzieren, die ein wenig im Gegensatz zur Dokumentation steht

Funktionierende .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 die nächste Übertragung bereitgestellt werden, und das war genau das, wonach ich gesucht habe.

Und wenn Sie mehrere Unterordner desselben Ordners auf die Whitelist setzen wollen, gruppieren Sie die Ausrufezeichen-Zeilen unter der Ausschluss-Anweisung 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/

Andernfalls wird es nicht wie erwartet funktionieren.

0 Stimmen

Endlich eine Antwort, die funktioniert. Ich frage mich, wann ich verstehen werde, wie .gitignore eigentlich funktioniert

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X