it-swarm.com.de

Wie entferne ich Dateien, die im .gitignore, aber noch im Repository aufgeführt sind?

Ich habe einige Dateien in meinem Repository, die ignoriert werden sollten. Ich habe sie zum .gitignore hinzugefügt, aber natürlich werden sie nicht aus meinem Repository entfernt.

Meine Frage ist also, ob es einen magischen Befehl oder ein magisches Skript gibt, das den Filterzweig verwendet, um meinen Verlauf neu zu schreiben und alle diese Dateien einfach zu entfernen. Oder einfach ein Befehl, der ein Commit erstellt, das sie entfernt?

248
Intrepidd

Sie können sie manuell aus dem Repository entfernen:

git rm --cached file1 file2 dir/file3

Oder wenn Sie viele Dateien haben:

git rm --cached `git ls-files -i --exclude-from=.gitignore`

In Git Bash unter Windows scheint dies jedoch nicht zu funktionieren. Es wird eine Fehlermeldung ausgegeben. Folgendes funktioniert besser:

git ls-files -i --exclude-from=.gitignore | xargs git rm --cached  

Hinsichtlich des Umschreibens des gesamten Verlaufs ohne diese Dateien bezweifle ich stark, dass es einen automatischen Weg gibt, dies zu tun.
Und wir alle wissen, dass es schlecht ist, die Geschichte neu zu schreiben, nicht wahr? :)

352
Samy Dindane

Eine einfachere Möglichkeit, die auf jedem Betriebssystem funktioniert, ist dies

git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"

Sie haben grundsätzlich alle Dateien gelesen, mit Ausnahme der Dateien im .gitignore

280
gtatr

Da die Dateien in .gitignore nicht nachverfolgt werden, können Sie mit dem Befehl git clean Dateien, die nicht der Versionskontrolle unterliegen, rekursiv entfernen.

Verwenden git clean -xdn, um einen Trockenlauf durchzuführen und zu sehen, was entfernt wird.
Dann benutze git clean -xdf, um es auszuführen.

Grundsätzlich gilt, git clean -h oder man git-clean (in Unix) wird Ihnen helfen.

Beachten Sie, dass dieser Befehl auch neue Dateien entfernt, die sich nicht im Staging-Bereich befinden.

Ich hoffe es hilft.

117
weiz

Ich habe eine sehr einfache Lösung gefunden, indem ich die Ausgabe der .gitignore-Anweisung mit sed manipuliert habe:

cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash

Erläuterung:

  1. drucken Sie die .gitignore-Datei
  2. entfernen Sie alle Kommentare aus dem Ausdruck
  3. lösche alle leeren Zeilen
  4. füge 'git rm -r' am Anfang der Zeile hinzu
  5. führe jede Zeile aus.
4
Scott Crossen