Frage Machen Sie .gitignore ignoriert alles außer ein paar Dateien


Ich verstehe, dass eine .gitignore-Datei bestimmte Dateien aus der Git-Version enthält Steuerung. Ich habe ein Projekt (LaTeX), das viele zusätzliche Dateien generiert (.auth, .dvi, .pdf, logs usw.), während es läuft, aber ich möchte nicht, dass diese verfolgt werden.

Ich bin mir bewusst, dass ich (vielleicht) es so machen sollte, dass all diese Dateien in ein Unterordner im Projekt trennen, da ich dann den Ordner einfach ignorieren könnte.

Gibt es jedoch einen möglichen Weg, um die Ausgabedateien im Stammverzeichnis der Projektbaum und benutze .gitignore, um alles außer den Dateien, die ich bin, zu ignorieren Tracking mit Git? Etwas wie

# Ignore everything
*

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

1168
2018-06-12 15:04


Ursprung


Antworten:


Ein optionales Präfix ! was negiert das Muster; Jede passende Datei wird von ausgeschlossen   Ein vorheriges Muster wird wieder eingefügt. Wenn ein negiertes Muster übereinstimmt,   Dies überschreibt niedrigere Präzedenzmusterquellen.

# 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/*

1702
2018-06-12 15:07



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

.gitignore

pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml

486
2018-05-01 12:31



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

Verwenden * ist gültig, aber es funktioniert rekursiv. Es wird von nun an keine Verzeichnisse mehr durchsuchen. Leute empfehlen zu verwenden !*/ um Verzeichnisse wieder auf die weiße Liste zu setzen, aber es ist tatsächlich besser, den Ordner mit der höchsten Ebene mit zu sperren /*

# 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/

Der obige Code würde alle Dateien mit Ausnahme von ignorieren .gitignore, README.md, folder/a/b1/ und folder/a/b2/ und alles, was in diesen beiden Ordnern enthalten ist. (Und .DS_Store und *.log Dateien werden in diesen Ordnern ignoriert.)

Offensichtlich könnte ich z.B. !/folder oder !/.gitignore auch.

Mehr Info: http://git-scm.com/docs/gitignore


139
2018-04-29 00:31



Etwas konkreter:

Beispiel: Ignoriere alles in webroot/cache - aber behalte webroot/cache/.htaccess.

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

FEHLT

webroot/cache*
!webroot/cache/.htaccess

ARBEITEN

webroot/cache/*
!webroot/cache/.htaccess

57
2017-08-13 13:23



# ignore these
*
# except foo
!foo

49
2018-06-12 15:06



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

Zum Beispiel, ignorieren Sie alles im Ordner "Anwendung" außer index.php und Ordner "config" Achten Sie auf die Bestellung.

Sie müssen zuerst wollen, dass Sie wollen.

FEHLT

application/*

!application/config/*

!application/index.php

ARBEITEN

!application/config/*

!application/index.php

application/*


23
2017-08-09 08:39



Sie können verwenden git config status.showUntrackedFiles no und alle nicht verfolgten Dateien werden vor Ihnen verborgen. Sehen man git-config für Details.


18
2018-06-12 15:20



Um Ordner von .gitignore auszuschließen, kann Folgendes durchgeführt werden.

!app/

app/*
!app/bower_components/

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

Dies ignoriert alle Dateien / Unterordner darin bower_components ausser für /highcharts.


12
2017-11-10 14:21



Es gibt eine Menge ähnlicher Fragen dazu, also werde ich das, was ich vorher geschrieben habe, posten:

Der einzige Weg, wie ich das an meiner Maschine arbeiten konnte, war, es so zu machen:

# 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 Inhalte für jede Ebene explizit zulassen müssen, die Sie einschließen möchten. Also, wenn ich Unterverzeichnisse 5 tief unter Themen habe, muss ich das noch buchstabieren.

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 Trail und Fehler!


9
2018-04-29 23:40