Es gibt einige erweiterungs Dateien , die Sie nicht ignorieren wollen: README, LICENSEoder COPYING, INSTALL, Makefileusw., obwohl Sie immer-add zwingen, und dann werden sie verfolgt
Jakub Narębski
@ JakubNarębski guter Punkt. Ich habe es in meine Antwort aufgenommen, um mehr Sichtbarkeit zu erreichen.
Aus diesem Grund !/**/ist es wichtig, die übergeordneten Ordner rekursiv in die weiße Liste aufzunehmen, wenn Dateien in die weiße Liste aufgenommen werden sollen.
Ich erwähnte dieselbe Regel in ähnlichen Fällen wie:
Wie Jakub Narębski kommentiert , möchten Sie möglicherweise nicht alle Dateien ohne Erweiterung ignorieren .
Mein Rat:
Fügen Sie zuerst die wichtige Datei ohne Erweiterung hinzu
Bearbeiten Sie dann Ihre .gitignoreDateien wie oben gezeigt: Die bereits versionierten Dateien werden nicht ignoriert (auch wenn sie keine Erweiterung haben). Alle anderen werden ignoriert.
Für zukünftige erweiterungslose Dateien, die Sie versionieren möchten:
git add -f -- myFile
Beachten Sie, dass es mit git 2.9.x / 2.10 (Mitte 2016?) Möglicherweise möglich ist, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen wird, wenn der wieder aufgenommene Pfad keinen Platzhalter enthält .
Die Antwort ist völlig richtig. Aber vielleicht besser .gitignorewäre **und !**.*. Ich weiß, dass dies keinen Unterschied macht, wenn das Sternchen vorne platziert wird, aber es ist expliziter und fundierter, wie Muscheln mit Platzhaltern umgehen ...
Willem Van Onsem
7
Hinweis: Um mit anderen Ausschlussregeln arbeiten zu können, muss dies der erste Regelsatz in Ihrer .gitignore-Datei sein
Erik
Sie können auch bestimmte erweiterungslose Dateien wieder einschließen, z !Makefile. B. mit . Beachten Sie, dass ich Probleme mit dieser Lösung in Git 1.7.1 hatte, während sie in 1.9.0 einwandfrei funktionierte. In meinem Fall funktionierte das Hinzufügen einer Datei im Stammverzeichnis einwandfrei, aber das Hinzufügen einer Datei mit einer Erweiterung in einem Unterverzeichnis wurde als ignoriert angezeigt. Dies scheint daran zu liegen, dass 1.7.1 das **Muster noch nicht unterstützt hat, siehe hier !
mxmlnkn
1
**wurde in Git hinzugefügt 1.8.2. Gibt es einen Nachteil gegenüber der Verwendung !*/anstelle von !/**/?
mxmlnkn
@TamaMcGlinn Das sieht aus wie ein regulärer Ausdruck: gitignore unterstützt keine regulären Ausdrucke.
VonC
50
*
!*/
!*.*
* sagt git, alles zu ignorieren.
!*/hebt dann alles auf, was ein Verzeichnis ist. Das ist entscheidend.
!*.* hebt die Zuordnung aller Dateien mit einer Erweiterung auf.
Ohne die !*/Regel würden Verzeichnisse ohne ein .im Namen nicht aufgelistet und keine Ihrer gewünschten Dateien würde außerhalb des Stammordners hinzugefügt.
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. Setzen Sie einen Backslash ("\") vor das erste "!" für Muster, die mit einem wörtlichen "!" beginnen, zum Beispiel "! wichtig! .txt".
Wenn das Muster mit einem Schrägstrich endet, wird es zum Zweck der folgenden Beschreibung entfernt, es wird jedoch nur eine Übereinstimmung mit einem Verzeichnis gefunden. Mit anderen Worten, foo / stimmt mit einem Verzeichnis foo und Pfaden darunter überein, stimmt jedoch nicht mit einer regulären Datei oder einem symbolischen Link foo überein (dies stimmt mit der allgemeinen Funktionsweise von pathspec in Git überein).
Guter Fang. +1. Ich hatte vergessen, meine Antwort mit der Regel zu aktualisieren, die ich kürzlich in anderen Antworten von Minen verwendet hatte. Ich habe meine Antwort entsprechend aktualisiert.
VonC
0
In meinen Ordnern befinden sich viele Dateien mit *.c, *.h, *.txt, *.csvusw. Erweiterungen und Binärdateien ohne Erweiterung. Also musste ich alle ausgeführten Dateien ignorieren *.c,*.hund .gitignore, so funktioniert das für mich aus dem .gitignoreBeispiel:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
README
,LICENSE
oderCOPYING
,INSTALL
,Makefile
usw., obwohl Sie immer-add zwingen, und dann werden sie verfolgtAntworten:
Sie können eine ähnliche Kombination ausprobieren:
Diese
gitignore
Ausschlussregel (ein negiertes Muster ) sollte alle Dateien außer denen mit einer Erweiterung ignorieren.Wie unten von Mad Physicist erwähnt , lautet die Regel:
Es ist nicht möglich, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist. (
*
)(
*
: es sei denn, bestimmte Bedingungen sind in Git 2.?+ erfüllt, siehe unten)Aus diesem Grund
!/**/
ist es wichtig, die übergeordneten Ordner rekursiv in die weiße Liste aufzunehmen, wenn Dateien in die weiße Liste aufgenommen werden sollen.Ich erwähnte dieselbe Regel in ähnlichen Fällen wie:
Wie Jakub Narębski kommentiert , möchten Sie möglicherweise nicht alle Dateien ohne Erweiterung ignorieren .
Mein Rat:
.gitignore
Dateien wie oben gezeigt: Die bereits versionierten Dateien werden nicht ignoriert (auch wenn sie keine Erweiterung haben). Alle anderen werden ignoriert.Für zukünftige erweiterungslose Dateien, die Sie versionieren möchten:
Beachten Sie, dass es mit git 2.9.x / 2.10 (Mitte 2016?) Möglicherweise möglich ist, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen wird, wenn der wieder aufgenommene Pfad keinen Platzhalter enthält .
Nguyễn Thái Ngọc Duy (
pclouds
) versucht, diese Funktion hinzuzufügen:Da jedoch eine der Regeln für die Wiedereingliederung lautete:
Das hätte hier sowieso nicht funktioniert.
quelle
.gitignore
wäre**
und!**.*
. Ich weiß, dass dies keinen Unterschied macht, wenn das Sternchen vorne platziert wird, aber es ist expliziter und fundierter, wie Muscheln mit Platzhaltern umgehen ...!Makefile
. B. mit . Beachten Sie, dass ich Probleme mit dieser Lösung in Git 1.7.1 hatte, während sie in 1.9.0 einwandfrei funktionierte. In meinem Fall funktionierte das Hinzufügen einer Datei im Stammverzeichnis einwandfrei, aber das Hinzufügen einer Datei mit einer Erweiterung in einem Unterverzeichnis wurde als ignoriert angezeigt. Dies scheint daran zu liegen, dass 1.7.1 das**
Muster noch nicht unterstützt hat, siehe hier !**
wurde in Git hinzugefügt1.8.2
. Gibt es einen Nachteil gegenüber der Verwendung!*/
anstelle von!/**/
?*
sagt git, alles zu ignorieren.!*/
hebt dann alles auf, was ein Verzeichnis ist. Das ist entscheidend.!*.*
hebt die Zuordnung aller Dateien mit einer Erweiterung auf.Ohne die
!*/
Regel würden Verzeichnisse ohne ein.
im Namen nicht aufgelistet und keine Ihrer gewünschten Dateien würde außerhalb des Stammordners hinzugefügt.Als Referenz lesen Sie diese beiden Abschnitte in der .gitignore Dokumentation auffallen:
quelle
In meinen Ordnern befinden sich viele Dateien mit
*.c, *.h, *.txt, *.csv
usw. Erweiterungen und Binärdateien ohne Erweiterung. Also musste ich alle ausgeführten Dateien ignorieren*.c,*.h
und.gitignore
, so funktioniert das für mich aus dem.gitignore
Beispiel:quelle