Gitignore funktioniert nicht


274

Meine .gitignoreDatei funktioniert aus irgendeinem Grund nicht und keine Menge Googeln konnte sie beheben. Folgendes habe ich:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

Es ist in dem Verzeichnis master, das mein Git-Repo ist. Ich verwende Git 1.8.4.2, weil ich auf einem MacBook mit OSX 10.8.6 bin.


4
1. Welche Dateien werden indiziert, obwohl dies nicht der Fall sein sollte? 2. Haben Sie den .gitignore hinzugefügt, nachdem Sie diese Dateien zum Repo hinzugefügt haben?
Ahmad

2
@Ahmad In mehreren Projekten wird der /bin/Ordner immer noch angezeigt , wenn ich a git status. Ich habe diese Dateien nicht geändert, seit ich den.gitignore
user3280133

1
"seit ich den .gitignore hinzugefügt habe" - also haben Sie den .gitignore nach dem Hinzufügen der Dateien hinzugefügt?
Ahmad

3
Mögliches Duplikat von .gitignore funktioniert nicht
Liam

Antworten:


683

Die Dateien / Ordner in Ihrer Versionskontrolle löschen sich nicht nur selbst, nur weil Sie sie dem hinzugefügt haben .gitignore. Sie befinden sich bereits im Repository und müssen entfernt werden. Sie können das einfach so machen:

( Denken Sie daran, alles zu übernehmen, was Sie geändert haben, bevor Sie dies tun. )

git rm -rf --cached .
git add .

Dadurch werden alle Dateien aus dem Repository entfernt und wieder hinzugefügt (diesmal unter Beachtung der Regeln in Ihrem Repository .gitignore).


2
oder Sie könnten einfach versuchen, die Dateien / Ordner, die Sie zu .gitignore hinzugefügt haben, mit git checkout folder_to_ignore / *
Zahra

1
@Greenish, aber das würde nicht funktionieren, wenn sie bereits festgeschrieben wurden, würde nur funktionieren, wenn sie inszeniert wurden. Falls sich der Ordner bereits im .gitignore befand, sollte dies nicht passieren (es sei denn, Sie erzwingen das Hinzufügen) :)
Ahmad

1
funktioniert bei mir nicht, wenn ich die Änderungen auf github drücke. Sagt, alles ist auf dem neuesten Stand !!!!
Dr. Younes Henni

1
Entschuldigung Ahmed, ich habe mein Problem behoben, indem ich die Gitignore-Datei gelöscht und erneut auf das Remote-Repo gezogen habe. Ich kann mich nicht mehr daran erinnern, was es gesagt hat, als ich den Git-Status eingegeben habe. Mein Problem ist behoben. Vielen Dank.
Dr. Younes Henni

3
Ich denke, es ist besser, git einen 'git ignore'-Befehl hinzuzufügen, um dies zu vereinfachen. Somit können wir jederzeit einfach verwenden git ignore path/file.
Tiw

123

Um eine einzelne Datei zu entfernen, die bereits zu Ihrem Repository hinzugefügt / initialisiert wurde, beenden Sie die Verfolgung der Datei, löschen Sie sie jedoch nicht aus Ihrem System. Verwenden Sie: git rm --cached filename

So entfernen Sie jede Datei, die sich jetzt in Ihrem befindet .gitignore:

Übernehmen Sie zuerst alle ausstehenden Codeänderungen und führen Sie dann diesen Befehl aus:

git rm -r --cached .

Dadurch werden alle geänderten Dateien aus dem Index (Staging-Bereich) entfernt und anschließend ausgeführt:

git add .

Verpflichte es:

git commit -m ".gitignore is now working"

Stellen Sie sicher, dass Sie Ihre Zweige wieder zum Master zusammenführen oder Ihren Zeiger verschieben, da ich beim Versuch beide meiner Feature-Zweige verloren habe. Glücklicherweise habe ich keine Arbeit verloren, alle meine letzten Updates aus dem Arbeitszweig wurden auf den Hauptzweig zurückgesetzt, aber abhängig von Ihrem Setup kann dieses Verhalten unerwünscht sein.
Schlitten

Wie würden Sie diesen Befehl verwenden, um einen Ordner anstelle einer Datei aus dem Cache zu entfernen?
RealMJDev

15

Nachdem ich ein bisschen wie ein Kaninchenbau hinuntergegangen war und versucht hatte, den Antworten auf diese Frage zu folgen (vielleicht weil ich dies in einem Visual Studio-Projekt tun musste), fand ich den einfacheren Weg

  1. Ausschneiden und Einfügen der Datei (en), die ich nicht mehr verfolgen möchte, an einem temporären Speicherort

  2. Übernehmen Sie das "Löschen" dieser Dateien

  3. Übernehmen Sie eine Änderung von .gitignore, um die Dateien auszuschließen, die ich vorübergehend verschoben habe

  4. Verschieben Sie die Dateien zurück in den Ordner.

Ich fand dies der direkteste Weg , um darüber zu gehen (zumindest in einem Visual Studio, oder würde ich andere IDE hieven basierte Umgebung wie Android Studio übernehmen), ohne versehentlich selbst in dem Fuß mit einem ziemlich allgegenwärtigen zu Schießen git rm -rf --cached ., wonach Das Visual Studio-Projekt, an dem ich gearbeitet habe, wurde nicht geladen.


2
Ich mag diesen Ansatz sehr - scheint weniger destruktiv zu sein, auch wenn er nicht als "richtig" angesehen wird.
Theyetiman

6

In meinem Fall war es ein Leerzeichen am Anfang der Datei, das deutlich sichtbar wurde, als ich die Datei im Editor öffnete, was in Visual Studio Code nicht offensichtlich war.


4

Ich habe etwas verwendet, um Gemeinsamkeiten .gitignorefür mich zu generieren , und bin darauf gestoßen. Nachdem ich die Antwort von @Ozesh gelesen hatte, öffnete ich sie im VS-Code, da unten rechts ein schöner Indikator für die Art der Zeilenenden angezeigt wird. Es war LF, also habe ich wie vorgeschlagen auf CRLF umgestellt, aber keine Würfel.

Dann schaute ich neben die Zeilenenden und bemerkte, dass sie mit UTF16 gespeichert wurden. Also habe ich mit UTF8-Codierung eines Voila erneut gespeichert, es hat funktioniert. Ich dachte nicht, dass die CRLF wichtig ist, also habe ich sie wieder in LF geändert, um sicherzugehen, und es hat immer noch funktioniert.

Natürlich war dies kein OPs-Problem, da er die Dateien bereits festgeschrieben hatte, sodass sie bereits indiziert waren, aber ich dachte, ich würde sie teilen, falls jemand anderes darüber stolpert.

TLDR ; Wenn Sie die Dateien noch nicht festgeschrieben haben und .gitignore immer noch nicht eingehalten wird, überprüfen Sie die Dateicodierung und stellen Sie sicher, dass UTF8 vorhanden ist. Wenn dies nicht funktioniert, versuchen Sie möglicherweise, mit den Zeilenenden herumzuspielen.


1
UTF16 war der Schuldige für mich. VS-Code geöffnet> .gitignore geöffnet> Eingabeaufforderung geöffnet> "Dateicodierung ändern"> "UTF-8"> Datei speichern
Michael

3

In meinem Fall waren Leerzeichen am Ende der Zeilen von .gitignore die Ursache. Achten Sie also auf Leerzeichen im Gitignore!


1

Ich habe mein Problem folgendermaßen gelöst:

Zunächst einmal bin ich ein Windows-Benutzer, aber ich habe ähnliche Probleme. Also poste ich meine Lösung hier.

Es gibt einen einfachen Grund, warum der .gitignore manchmal nicht so funktioniert, wie er soll. Dies liegt am EOL-Konvertierungsverhalten.

Hier ist eine schnelle Lösung dafür

Bearbeiten> EOL-Konvertierung> Windows-Format> Speichern

Sie können Ihre Texteditor-Einstellungen dafür verantwortlich machen.

Beispielsweise:

Als Windows-Entwickler verwende ich im Gegensatz zu Vim-Benutzern normalerweise Notepad ++ zum Bearbeiten meines Textes.

Wenn ich also meine .gitignore-Datei mit Notepad ++ öffne, sieht es ungefähr so ​​aus:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Wenn ich dieselbe Datei mit dem Standard-Editor öffne, bekomme ich Folgendes

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Vielleicht haben Sie es bereits erraten, indem Sie sich die Ausgabe angesehen haben. Alles im .gitignore ist zu einem Einzeiler geworden, und da am Anfang ein ## steht, verhält es sich so, als ob alles kommentiert wäre.

Die Möglichkeit, dies zu beheben, ist einfach: Öffnen Sie einfach Ihre .gitignore-Datei mit Notepad ++ und gehen Sie dann wie folgt vor

Bearbeiten> EOL-Konvertierung> Windows-Format> Speichern

Wenn Sie das nächste Mal dieselbe Datei mit dem Windows-Standardnotizblock öffnen, sollte alles ordnungsgemäß formatiert sein. Probieren Sie es aus und sehen Sie, ob dies für Sie funktioniert.


1

Außerdem müssen Kommentare in einer eigenen Zeile stehen. Sie können nicht nach einem Eintrag gesetzt werden. Das wird also nicht funktionieren:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Aber das wird funktionieren:

# fine to comment here
/node_modules

0

Funktioniert git reset --hardfür jemanden? Ich sage nicht, dass dies eine gute Lösung ist, es schien nur beim ersten Versuch zu funktionieren.


Bitte ignorieren Sie meinen Kommentar oben. Jemand bei der Arbeit hat etwas so falsches in Git gemacht, dass es doppelte Ordner verursachte und ich war mir eine ganze Weile nicht bewusst. Vielen Dank.
user1889992

0

Ich habe den großen Fehler gemacht, meinen Dockerignore zu bearbeiten, und habe großartig funktioniert, nachdem ich die richtige Ignorierdatei gefunden habe: p


0

Mein Bit hinzuzufügen, da dies eine beliebte Frage ist.

Ich konnte das Verzeichnis .history nicht in .gitignore ablegen, da es, egal welche Kombination ich versuchte, einfach nicht funktionierte. Windows generiert bei jedem Speichern neue Dateien, und ich möchte diese überhaupt nicht sehen.

Geben Sie hier die Bildbeschreibung ein

Aber dann wurde mir klar, dass dies nur meine persönliche Entwicklungsumgebung auf meinem Computer ist. Dinge wie .history oder .vscode sind spezifisch für mich, daher wäre es seltsam, wenn jeder seine eigenen .gitignore-Einträge basierend auf der von ihm verwendeten IDE oder dem verwendeten Betriebssystem einfügen würde.

Also hat das bei mir funktioniert, füge einfach ".history" an .git / info / exclude an

echo ".history" >> .git/info/exclude
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.