Frage Wie man Git "vergessen" über eine Datei, die verfolgt wurde, aber jetzt in .gitignore ist?


Es gibt eine Datei, die von verfolgt wurde git, aber jetzt ist die Datei auf der .gitignore Liste.

Diese Datei wird jedoch weiterhin angezeigt git status nachdem es bearbeitet wurde. Wie zwingst du? git um es komplett zu vergessen?


3645
2017-08-13 19:23


Ursprung


Antworten:


.gitignore verhindert, dass nicht verfolgte Dateien hinzugefügt werden (ohne eine add -f) zu dem Satz von Dateien, die von git verfolgt werden, aber git wird weiterhin alle Dateien verfolgen, die bereits verfolgt werden.

Um die Verfolgung einer Datei zu stoppen, müssen Sie sie aus dem Index entfernen. Dies kann mit diesem Befehl erreicht werden.

git rm --cached <file>

Das Entfernen der Datei von der Hauptversion wird beim nächsten Commit erfolgen.


3872
2017-08-13 20:40



Die Reihe der folgenden Befehle entfernt alle Elemente aus dem Git-Index (nicht aus dem Arbeitsverzeichnis oder dem lokalen Repo) und aktualisiert dann den Git-Index unter Berücksichtigung von Git-Ignorieren. PS. Index = Cache

Zuerst:

git rm -r --cached . 
git add .

Dann:

git commit -am "Remove ignored files"

1990
2017-09-30 13:51



Git Update-Index macht den Job für mich:

git update-index --assume-unchanged <file>

Hinweis: Diese Lösung ist eigentlich unabhängig von .gitignore wie Gitignore ist nur für nicht verfolgte Dateien.

bearbeiten: Da diese Antwort gepostet wurde, wurde eine neue Option erstellt, die bevorzugt werden sollte. Du solltest benutzen --skip-worktree Dies ist für modifizierte Nachverfolgungsdateien, die der Benutzer nicht mehr festschreiben und behalten möchte --assume-unchanged für die Leistung, um git zu verhindern, den Status großer verfolgter Dateien zu überprüfen. Sehen https://stackoverflow.com/a/13631525/717372 für mehr Details...


739
2017-11-27 11:24



git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

Dadurch wird die Liste der ignorierten Dateien übernommen und aus dem Index entfernt. Anschließend werden die Änderungen übernommen.


217
2018-05-23 22:29



Ich benutze immer diesen Befehl, um diese nicht aufgezeichneten Dateien zu entfernen. Ein-Zeilen-, Unix-Stil, saubere Ausgabe:

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

Es listet alle ignorierten Dateien auf, ersetzt jede Ausgabezeile durch eine in Anführungszeichen gesetzte Zeile, um Pfade mit Leerzeichen innerhalb zu behandeln und alles zu übergeben git rm -r --cached um die Pfade / Dateien / Verzeichnisse aus dem Index zu entfernen.


59
2018-06-19 15:42



Wenn du nicht kannst git rm eine verfolgte Datei, weil andere Personen sie möglicherweise benötigen (Warnung, auch wenn Sie  git rm --cachedWenn jemand anderes diese Änderung erhält, werden seine Dateien in seinem Dateisystem gelöscht) https://gist.github.com/1423106 für die Art und Weise, wie Menschen an dem Problem gearbeitet haben.


49
2017-07-19 00:08



Verschiebe es, begehe, dann verschiebe es wieder zurück. Das hat in der Vergangenheit für mich funktioniert. Es ist wahrscheinlich ein "gretscherer" Weg, dies zu erreichen.


43
2017-08-13 19:27