602 Stimmen

Anwenden von .gitignore auf übertragene Dateien

Ich habe eine Menge Dateien übertragen, die ich jetzt ignorieren möchte. Wie kann ich Git anweisen, diese Dateien bei zukünftigen Übertragungen zu ignorieren?

EDIT: Ich möchte sie auch aus dem Repository entfernen. Sie sind Dateien, die nach jedem Build oder für benutzerspezifische Tooling-Unterstützung erstellt werden.

712voto

Jonathan Callen Punkte 11005

Nach der Bearbeitung .gitignore um die ignorierten Dateien abzugleichen, können Sie Folgendes tun git ls-files -ci --exclude-standard um die Dateien zu sehen, die in den Ausschlusslisten enthalten sind; Sie können dann

  • Linux/MacOS: git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
  • Windows (PowerShell): git ls-files -ci --exclude-standard | % { git rm --cached "$_" }
  • Windows (cmd.exe): for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"

um sie aus dem Repository zu entfernen (ohne sie von der Festplatte zu löschen).

Modifier : Sie können dies auch als Alias in Ihrer .gitconfig-Datei hinzufügen, so dass Sie es jederzeit ausführen können. Fügen Sie einfach die folgende Zeile unter dem Abschnitt [alias] ein (ändern Sie sie je nach Bedarf für Windows oder Mac):

apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached

(Die -r Flagge in xargs 防ぐ git rm davon ab, auf ein leeres Ergebnis zu laufen und seine Verwendungsnachricht auszugeben, wird aber möglicherweise nur von GNU findutils unterstützt. Andere Versionen von xargs kann eine ähnliche Option haben, muss es aber nicht).

Jetzt können Sie einfach Folgendes eingeben git apply-gitignore in Ihrem Repo, und es wird die Arbeit für Sie erledigen!

629voto

Matt Ball Punkte 343109

208voto

ben.tiberius.avery Punkte 2076

Um die Datei im Projektarchiv zu belassen, aber zukünftige Änderungen daran zu ignorieren:

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

und dies rückgängig zu machen:

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

um herauszufinden, welche Dateien auf diese Weise eingestellt wurden:

git ls-files -v|grep '^h'

Anerkennung für die ursprüngliche Antwort auf http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/

204voto

Théo Attali Punkte 1949

Vergewissern Sie sich, dass Ihr aktuelles Repo die neueste Version ist und keine laufenden Änderungen enthält.

  1. Modifier .gitignore wie Sie wünschen
  2. git rm -r --cached . (alle Dateien entfernen)
  3. git add . (alle Dateien gemäß gitignore neu hinzufügen)

dann wie üblich übertragen

12voto

Chris Pfohl Punkte 16578

Alte Frage, aber einige von uns sind in git-posh (powershell). Dies ist die Lösung für diese Aufgabe:

git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }

CodeJaeger.com

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.

Powered by:

X