Es gibt eine Datei, die von Git verfolgt wurde, aber jetzt ist die Datei in der .gitignore
Liste.
Diese Datei taucht jedoch weiterhin in git status
nachdem es bearbeitet wurde. Wie kann man Git zwingen, es komplett zu vergessen?
Es gibt eine Datei, die von Git verfolgt wurde, aber jetzt ist die Datei in der .gitignore
Liste.
Diese Datei taucht jedoch weiterhin in git status
nachdem es bearbeitet wurde. Wie kann man Git zwingen, es komplett zu vergessen?
Ich verwende diesen Befehl immer, um diese nicht verfolgten Dateien zu entfernen. Einzeilige, saubere Ausgabe im Unix-Stil:
git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached
Es listet alle ignorierten Dateien auf, ersetzt jede Ausgabezeile durch eine Anführungszeichen-Zeile, um Pfade mit Leerzeichen darin zu behandeln, und übergibt alles an git rm -r --cached
um die Pfade/Dateien/Verzeichnisse aus dem Index zu entfernen.
Nehmen wir an, Sie haben bereits einige Dateien zu Ihrem Git-Repository hinzugefügt/übertragen und fügen diese dann zu Ihrem .gitignore Datei; diese Dateien werden weiterhin in Ihrem Repository-Index vorhanden sein. In diesem Artikel werden wir sehen, wie man sie loswird.
Bevor Sie fortfahren, vergewissern Sie sich, dass alle Ihre Änderungen festgeschrieben sind, einschließlich Ihrer .gitignore Datei.
Um Ihr Repository zu löschen, verwenden Sie:
git rm -r --cached .
El rm
Das Kommando kann unversöhnlich sein. Wenn Sie vorher ausprobieren möchten, was er tut, fügen Sie die -n
o --dry-run
Flagge, um die Dinge zu testen.
git add .
git commit -m ".gitignore fix"
Ihr Repository ist sauber :)
Übertragen Sie die Änderungen auf Ihre Fernbedienung, damit die Änderungen auch dort wirksam werden.
Wenn Sie nicht git rm
eine verfolgte Datei, weil andere Leute sie brauchen könnten (Warnung, auch wenn Sie git rm --cached
Wenn jemand anderes diese Änderung erhält, werden seine Dateien in seinem Dateisystem gelöscht). Dies geschieht häufig aufgrund von Überschreibungen der Konfigurationsdatei, Authentifizierungsdaten usw. Bitte sehen Sie sich https://gist.github.com/1423106 wie das Problem umgangen werden kann.
Zusammengefasst:
Ich habe dies erreicht, indem ich git filter-branch . Der genaue Befehl, den ich verwendet habe, stammt aus der Manpage:
WARNUNG : Damit wird die Datei aus dem gesamten Verlauf gelöscht.
git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
Dieser Befehl erstellt die gesamte Commit-Historie neu, indem er git rm
vor jeder Übertragung und wird so die angegebene Datei loswerden. Vergessen Sie nicht, die Datei zu sichern, bevor Sie den Befehl ausführen, da er wird verloren gehen.
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.