Wie kann ich Git dazu bringen, eine Datei zu „vergessen“, die verfolgt wurde, sich aber jetzt in .gitignore befindet?

Lesezeit: 7 Minuten

Wie kann ich Git dazu bringen eine Datei zu „vergessen
Iwan

Es gibt eine Datei, die von Git nachverfolgt wurde, aber jetzt befindet sich die Datei auf der .gitignore Liste.

Diese Datei wird jedoch weiterhin in angezeigt git status nachdem es bearbeitet wurde. Wie bringt man Git dazu, es komplett zu vergessen?

  • git clean -X klingt ähnlich, trifft aber in dieser Situation nicht zu (wenn die Dateien noch von Git verfolgt werden). Ich schreibe dies für alle, die nach einer Lösung suchen, um nicht dem falschen Weg zu folgen.

    – imz – Ivan Zakharyaschev

    27. Februar 2015 um 12:14 Uhr

  • Die einzige wirkliche Antwort darauf ist unten, siehe git update-index --assume-unchanged. Diese Lösung 1) hält die Datei auf dem Server (Index), 2) ermöglicht es Ihnen, sie lokal frei zu ändern.

    – QWERTZ

    4. Januar 2016 um 14:15 Uhr

  • Sie müssen verwenden --skip-worktreesiehe: stackoverflow.com/questions/13630849/…

    – Doppelgänger

    5. August 2016 um 20:33 Uhr

  • Eine wichtige Frage ist: Soll die Datei im Repository bleiben oder nicht? Wenn zB jemand das Repo neu klont, sollte er die Datei bekommen oder nicht? Wenn JAWOHL dann git update-index --assume-unchanged <file> korrekt ist und die Datei im Repository verbleibt und Änderungen nicht mit hinzugefügt werden git add. Wenn NEIN (zum Beispiel war es eine Cache-Datei, eine generierte Datei usw.), dann git rm --cached <file> wird es aus dem Repository entfernen.

    – Martin

    22. November 2016 um 10:45 Uhr


  • @Martin @Qwerty Jeder sollte aufhören, sich zu beraten --assume-unchanged Dies dient der Leistung, um zu verhindern, dass Git den Status großer nachverfolgter Dateien überprüft, es jedoch vorzieht --skip-worktree Dies ist für modifizierte nachverfolgte Dateien, die der Benutzer nicht mehr festschreiben möchte. Siehe stackoverflow.com/questions/13630849/…

    – Philipp

    15. Februar 2018 um 11:16 Uhr

Wie kann ich Git dazu bringen eine Datei zu „vergessen
Matt Frear

Die folgende Befehlsfolge entfernt alle Elemente aus dem Git-Index (nicht aus dem Arbeitsverzeichnis oder lokalen Repository) und aktualisiert dann den Git-Index, wobei Git-Ignorierungen berücksichtigt werden. PS. Index = Cache

Zuerst:

git rm -r --cached .
git add .

Dann:

git commit -am "Remove ignored files"

Oder als Einzeiler:

git rm -r --cached . && git add . && git commit -am "Remove ignored files"

  • Um den Unterschied zwischen dieser Antwort und der akzeptierten hervorzuheben: Mit diesen Befehlen müssen Sie die betroffenen Dateien nicht wirklich kennen. (Stellen Sie sich ein temporäres Verzeichnis mit vielen zufälligen Dateien vor, die aus dem Index gelöscht werden sollten).

    – Ludwig

    27. März 2014 um 10:17 Uhr


  • Gleich wie die akzeptierte Antwort. Dateien werden gelöscht git pull.

    – Peter Peller

    22. Mai 2014 um 16:07 Uhr

  • Es wäre schön, dies als Standard-Git-Befehl zu haben. Etwas wie git rmignored.

    – Berik

    20. Dezember 2014 um 11:59 Uhr

  • @gudthing -r steht für “rekursiv”

    – Kennzeichen

    15. Juli 2015 um 11:24 Uhr

  • Damit können Sie am Ende hinzufügen andere nutzlose Dateien, die derzeit nicht enthalten sind .gitignore. Das kann schwierig herauszufinden sein, je nachdem, wie laut Sie sind git status ist nach diesem Befehl. Ein Befehl, der nur entfernt neu ignorierte Dateien wären besser. Deshalb bevorzuge ich die Antwort von thSoft

    – KurzedMetal

    22. September 2015 um 14:27 Uhr


  • Dies IST die wahre Antwort. Genial eigentlich, sehr einfach, verschmutzt nicht git status und eigentlich sehr intuitiv. Danke.

    – Pablo Olmos de Aguilera C.

    12. Januar 2014 um 23:57 Uhr

  • git update-index --assume-unchanged <path> … bewirkt, dass git Änderungen in den angegebenen Pfaden ignoriert, unabhängig davon .gitignore. Wenn Sie von einer Remote ziehen und diese Remote Änderungen an diesem Pfad enthält, schlägt Git die Zusammenführung mit einem Konflikt fehl und Sie müssen manuell zusammenführen. git rm --cached <path> … bewirkt, dass Git diesen Pfad nicht mehr verfolgt. Wenn Sie den Pfad nicht hinzufügen .gitignore Sie werden den Weg in Zukunft sehen git status. Die erste Option hat weniger Rauschen im Git-Commit-Verlauf und ermöglicht, dass Änderungen an der „ignorierten“ Datei in Zukunft verteilt werden.

    – ManicDee

    25. Juni 2014 um 2:02 Uhr

  • Ich bin ziemlich verwirrt darüber, dass dies nicht die akzeptierte Antwort ist. Die akzeptierte Antwort hier beantwortet eindeutig nicht die eigentlich gestellte Frage. Diese Antwort ignoriert Änderungen an der Datei, die sich im Repository befindet, entfernt sie jedoch nicht aus dem Repository.

    – David Cooper

    2. Dezember 2015 um 22:46 Uhr

  • Diese Antwort wäre viel nützlicher, wenn sie genau erklären würde, was der angegebene Befehl tut, zB wie er sich von den anderen vorgeschlagenen Lösungen unterscheidet.

    – LarsH

    19. August 2016 um 15:39 Uhr

  • Dieser Befehl wird nur auf Ihrem Computer wirksam, oder? Was ist, wenn ich die Verfolgung der Datei auf allen Computern stoppen möchte? auch auf den maschinen, die den rep in zukunft klonen werden?

    – George

    30. Juli 2018 um 6:37 Uhr

1646918289 661 Wie kann ich Git dazu bringen eine Datei zu „vergessen
thSoft

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

Dies nimmt die Liste der ignorierten Dateien, entfernt sie aus dem Index und schreibt die Änderungen fest.

  • Wenn Sie sie auch aus dem Arbeitsverzeichnis entfernen müssen, führen Sie sie einfach aus git ls-files --ignored --exclude-standard | xargs git rm . Ich glaube, diese Antwort ist die beste! Weil es sehr klar ist, Unix-artig, und das Gewünschte auf direkte Weise erledigt, ohne die Nebeneffekte anderer, komplexerer Befehle zu erstellen.

    – imz – Ivan Zakharyaschev

    27. Februar 2015 um 12:23 Uhr


  • Gute Antwort; Der Befehl schlägt jedoch fehl, wenn Sie Pfade mit Leerzeichen in der Mitte haben, z. B.: “My dir/my_ignored_file.txt”

    – David H.

    19. Juni 2015 um 15:29 Uhr

  • git ls-files –ignored –exclude-standard | sed ‘s/.*/”&”/’ | xargs git rm –cached

    – David H.

    19. Juni 2015 um 15:36 Uhr

  • git rm werde mich beschweren, wenn ls-files passte nichts zusammen. Verwenden xargs -r git rm ... erzählen xargs nicht zu laufen git rm wenn keine Dateien übereinstimmen.

    –Wolfgang

    6. Januar 2016 um 19:15 Uhr


  • Es wäre besser, \0 als Trennzeichen zu verwenden: git ls-files --ignored --exclude-standard -z|xargs -0 git rm --cached

    – Nils-o-mat

    2. Februar 2016 um 10:05 Uhr

1646918290 897 Wie kann ich Git dazu bringen eine Datei zu „vergessen
Peter Mortensen

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 Ihre ignorierten Dateien auf, ersetzt jede Ausgabezeile durch eine Zeile in Anführungszeichen, anstatt Pfade mit Leerzeichen darin zu behandeln, und übergibt alles an git rm -r --cached um die Pfade/Dateien/Verzeichnisse aus dem Index zu entfernen.

  • Wenn Sie sie auch aus dem Arbeitsverzeichnis entfernen müssen, führen Sie sie einfach aus git ls-files --ignored --exclude-standard | xargs git rm . Ich glaube, diese Antwort ist die beste! Weil es sehr klar ist, Unix-artig, und das Gewünschte auf direkte Weise erledigt, ohne die Nebeneffekte anderer, komplexerer Befehle zu erstellen.

    – imz – Ivan Zakharyaschev

    27. Februar 2015 um 12:23 Uhr


  • Gute Antwort; Der Befehl schlägt jedoch fehl, wenn Sie Pfade mit Leerzeichen in der Mitte haben, z. B.: “My dir/my_ignored_file.txt”

    – David H.

    19. Juni 2015 um 15:29 Uhr

  • git ls-files –ignored –exclude-standard | sed ‘s/.*/”&”/’ | xargs git rm –cached

    – David H.

    19. Juni 2015 um 15:36 Uhr

  • git rm werde mich beschweren, wenn ls-files passte nichts zusammen. Verwenden xargs -r git rm ... erzählen xargs nicht zu laufen git rm wenn keine Dateien übereinstimmen.

    –Wolfgang

    6. Januar 2016 um 19:15 Uhr


  • Es wäre besser, \0 als Trennzeichen zu verwenden: git ls-files --ignored --exclude-standard -z|xargs -0 git rm --cached

    – Nils-o-mat

    2. Februar 2016 um 10:05 Uhr

1646918290 897 Wie kann ich Git dazu bringen eine Datei zu „vergessen
Peter Mortensen

Verschiebe es, bestätige es und verschiebe es dann wieder hinein.

Dies hat in der Vergangenheit für mich funktioniert, aber es gibt wahrscheinlich einen “gittiereren” Weg, dies zu erreichen.

  • Dies funktionierte hervorragend, wenn Sie eine Reihe von Dateien ignorieren möchten, die zuvor nicht ignoriert wurden. Aber wie Sie sagten, gibt es wahrscheinlich einen besseren Weg dafür.

    – Oskar Persson

    28. Mai 2013 um 16:19 Uhr

  • Genau das habe ich getan. Verschieben Sie die Dateien einfach in einen Ordner außerhalb von Git und führen Sie dann “git add .”, “git commit” aus. (Dadurch wurden die Dateien entfernt), fügen Sie dann das Gitignore hinzu, verweisen Sie auf die Dateien/Ordner, führen Sie erneut ein Commit durch, um die Gitignore-Datei zu Git hinzuzufügen, und kopieren/verschieben Sie sie dann zurück in die Ordner, und sie sollten ignoriert werden. NB: Es scheint, dass die Dateien aus GIT gelöscht wurden, also würden sie wahrscheinlich aus anderen Checkouts/Pulls entfernt, wie in den obigen Lösungen erwähnt, aber da Sie anfänglich Kopien davon erstellen, ist dies meiner Meinung nach kein so großes Problem. Sag einfach dem Rest des Teams Bescheid…

    – Del

    23. September 2016 um 12:04 Uhr


  • Dies ist der einfachste Weg, um falsch festgeschriebene Ordner loszuwerden.

    – Martlark

    14. Januar 2017 um 8:01 Uhr

  • Scheint die einzige Möglichkeit zu sein, die ich sehen kann. Es ist ein massiver Fehler (kein ‘Feature’) in Git, dass, sobald Sie eine Datei/einen Ordner zu .gitignore hinzufügen, diese Datei von diesem Punkt an nicht einfach ignoriert wird – für immer – überall.

    – JosefK

    24. September 2017 um 9:09 Uhr

  • Dies funktionierte, nachdem ich sie hinzugefügt hatte und sie dann nachträglich zu .gitignore hinzufügte

    – hanzolo

    29. Juli 2019 um 22:00 Uhr

988060cookie-checkWie kann ich Git dazu bringen, eine Datei zu „vergessen“, die verfolgt wurde, sich aber jetzt in .gitignore befindet?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy