.gitignore bestimmte Datei ausschließen

92

Ich versuche, die .gitignoreDatei zum Ausschließen templates.jsim public/app/Ordner zu verwenden. Meine .gitignoreDatei sieht folgendermaßen aus:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

Aber wenn ich die Git Gui einchecke, wird die templates.jsDatei immer noch darin angezeigt. Wie kann ich eine Datei mit ausdrücklich ausschließen .gitignore?

user1995781
quelle
2
Bedeutet das, dass die Datei bereits zuvor zum Repository hinzugefügt wurde? .gitignoreignoriert nur den hinzuzufügenden Inhalt.
Willem Van Onsem
2
@CommuSoft Ja, es wurde zuvor zum Repository hinzugefügt. Wie kann ich es jetzt ausschließen? Ist meine Vorgehensweise .gitignorekorrekt?
user1995781

Antworten:

148

Im Gegensatz zu dem, was der Name "ignorieren" vermuten lässt. .gitignorewird nur konsultiert, wenn Sie git addDateien: Mit anderen Worten, eine Datei, die bereits zum (Index des) Repositorys hinzugefügt wurde, wird basierend auf dem nicht ausgeschlossen .gitignore.

Zuerst ändern Sie das besser .gitignoreso, dass die Datei nicht mehr hinzugefügt wird. Fügen Sie der .gitignoreDatei die folgende Zeile hinzu :

public/app/template.js

Als nächstes müssen Sie die Datei aus dem Repository ausschließen. Wahrscheinlich möchten Sie die Datei nicht aus Ihrem Dateisystem entfernen. Dies kann folgendermaßen erfolgen:

git rm --cached public/app/template.js

Das --cachedFlag stellt sicher, dass die Datei nicht aus Ihrem Dateisystem entfernt wird. (Wenn nicht wichtig, können Sie verwenden git rm public/app/template.js, aber dies wird die Datei entfernen ).

Hintergrund

Der Grund, der .gitignorenicht proaktiv verwendet wird, liegt darin, dass Sie manchmal das überschreiben möchten .gitignore. Angenommen, Sie möchten keine *.logDateien verfolgen , die Sie *.login der Datei angeben können .gitignore. Wenn Sie jedoch einen bestimmten Titel verfolgen möchten, können Sie diesen hinzufügen git add -f some.log. Das -fFlag erzwingt gitdas Hinzufügen der Datei.

Willem Van Onsem
quelle
Als Lebensretter hatte ich meine Anmeldeinformationen vor
mLstudent33
20

Sobald eine Datei einmal zum Git-Repository hinzugefügt wurde, wird sie weiterhin verfolgt, unabhängig davon, ob sie in der Gitignore-Datei aufgeführt ist oder nicht.

Ich vermute, Sie haben die Datei template.js zuvor hinzugefügt. In diesem Fall werden weiterhin Änderungen verfolgt, bis Sie sie aus dem Repository entfernen. Sobald die Datei aus dem Repository entfernt wurde, wird sie über die Gitignore-Datei ordnungsgemäß ignoriert.

Sie können eine Datei aus einem Git-Repository (Befehlszeile) entfernen, ohne sie zu löschen

git rm --cached FILENAME

Sobald Sie dies tun und versuchen, die Datei in Ihrem Gitignore festzuschreiben, wird dies nicht mehr der Fall sein.

Beachten Sie, dass, wenn Sie speziell eine Datei hinzufügen, die Sie in Ihrem Gitignore haben, das manuelle Hinzufügen der Datei den Gitignore überschreibt.

BTownTKD
quelle
Danke Schatz, "git rm --cached FILENAME" hat wie ein Zauber funktioniert :)
Kamlesh
11

Wenn Sie bereits eine Datei verfolgen ( git adddarauf und git commit), .gitignorehilft das nicht.

Ich glaube , was Sie wollen eine Datei Tracking zu stoppen ist, und dann verwenden .gitignoresie auszuschließen. Verwenden Sie Folgendes, um die Verfolgung einer Datei zu beenden, die Datei jedoch beizubehalten:

git rm --cached <file>

Ross
quelle
nicht dv, aber ich denke, du solltest deine Worte vielleicht besser auswählen. Das Speichern im Repository steht im Gegensatz zu dem Speichern im lokalen Dateisystem . Ein Repository nicht Karte auf einem Dateisystem ...
Willem Van Onsem
@CommuSoft Zu einiger Zufriedenheit behoben, war ich nicht zu vorsichtig, weil andere Leute es besser beantwortet haben. Danke für den Vorschlag.
Ross
7

In diesem Fall können Sie die Verfolgung templates.jsmit beenden

git rm --cached public/app/templates.js

Wie andere erklärt haben, werden .gitignorenur hinzuzufügende Inhalte ignoriert. Wenn Sie beispielsweise häufig verwenden git add .und templates.jsin Ihrem haben .gitignore, wird es von git nicht hinzugefügt.

Thomas Hughes
quelle