Ich habe einige Dateien in meinem Repository, die ignoriert werden sollten. Ich habe sie dem .gitignore hinzugefügt, aber natürlich werden sie nicht aus meinem Repository entfernt.
Meine Frage ist also, gibt es einen magischen Befehl oder ein Skript mit Filterzweig, mit dem ich meinen Verlauf neu schreiben und all diese Dateien einfach entfernen kann? Oder einfach ein Befehl, der ein Commit erstellt, das sie entfernt?
Antworten:
Sie können sie manuell aus dem Repository entfernen:
Oder wenn Sie viele Dateien haben:
Dies scheint jedoch in Git Bash unter Windows nicht zu funktionieren. Es wird eine Fehlermeldung ausgegeben. Folgendes funktioniert besser:
In Bezug auf das Umschreiben des gesamten Verlaufs ohne diese Dateien bezweifle ich sehr, dass es einen automatischen Weg gibt, dies zu tun.
Und wir alle wissen, dass es schlecht ist, die Geschichte neu zu schreiben, nicht wahr? :) :)
quelle
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
scheint den Trick zu tungit ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
Eine einfachere Möglichkeit, die auf jedem Betriebssystem funktioniert, ist dies
Sie haben im Grunde alle Dateien gelesen, außer denen im .gitignore
quelle
Da die Dateien in .gitignore nicht verfolgt werden, können Sie mit dem Befehl git clean Dateien rekursiv entfernen, die nicht der Versionskontrolle unterliegen.
Verwenden Sie
git clean -xdn
diese Option , um einen Trockenlauf durchzuführen und zu sehen, was entfernt wird.Dann verwenden Sie
git clean -xdf
, um es auszuführen.Grundsätzlich
git clean -h
oderman git-clean
(unter Unix) gibt Ihnen Hilfe.Beachten Sie, dass mit diesem Befehl auch neue Dateien entfernt werden , die sich nicht im Staging-Bereich befinden.
Ich hoffe es hilft.
quelle
.gitignore
werden verfolgt.git clean -xdn
ist ein Trockenlauf, der nicht gelöscht wird. der nächste wird.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:
quelle
sed
ist geradeaus?Unter Linux können Sie diesen Befehl verwenden:
Zum Beispiel möchte ich "* .py ~" löschen, also sollte mein Befehl ==> sein
find . -name "*.py~" -exec rm -f {} \;
quelle
Der Git ignoriert die Dateien, die mit dem Gitignore-Muster übereinstimmen, nachdem Sie es zu Gitignore hinzugefügt haben.
Die bereits im Repository vorhandenen Dateien befinden sich jedoch noch im.
Verwenden Sie
git rm files_ignored; git commit -m 'rm no use files'
diese Option, um ignorierte Dateien zu löschen.quelle