git filter-repo
Jeder hat schon einmal versehentlich eine Config-Datei mit sensiblen Daten in ein Repository gepusht, und das ist auch okay! Wichtig ist dabei nur, dass man diese Datei danach wieder spurenlos aus dem Repository entfernt, damit geheime Informationen nicht in die falschen Hände geraten können.
Der Befehl git filter-repo ist ein leistungsstarkes Werkzeug, das verwendet wird, um Git-Repositorys zu bereinigen und zu transformieren. Es ist schneller und flexibler als der frühere git filter-branch. Mit git filter-repo kannst du z. B. sensible Daten aus der Historie entfernen, Branches umbenennen oder die Struktur des Repositorys verändern.
Vorbereitungen
Da git filter-repo nicht standardmäßig bei Git mitgeliefert wird, musst du es zuerst installieren.
- Auf Linux:
pacman -S git-filter-repo - Auf Windows: Eine Anleitung zur Installation findest du hier.
Wichtig
- Erstelle ein Backup deines Repositorys: Das Entfernen einer Datei aus der Git-Historie überschreibt Commits und kann nicht rückgängig gemacht werden.
- Koordiniere dich mit deinen Teamkollegen: Das Umschreiben der Historie erfordert einen Force-Push auf das Remote-Repository, daher ist es wichtig, dass alle anderen Beteiligten dies wissen. Eventuell muss für das betroffene Git-Repository die Branch Protection deaktiviert werden.
Entfernen einer unerwünschten Datei
- Mit folgendem Befehl, wird die datei config.bak.js aus allen Commits entfernt:
git filter-repo --path config.bak.js --invert-paths--path config.bak.js: Gibt die Datei an, die entfernt werden soll.--invert-paths: Entfernt die angegebene Datei aus der gesamten Historie.
- Aktualisiere
.gitignore- Damit die Datei nicht erneut gepusht wird, sollte sie der
.gitignore-Datei hinzugefügt werden
- Damit die Datei nicht erneut gepusht wird, sollte sie der
- Force-Push zum Remote-Repository
- Da du die Historie überschrieben hast, musst du die Änderungen nun mit einem Force-Push in das Remote-Repository hochladen:
git push origin --force --all
- Tags Force-Pushen (falls erforderlich)
- Wenn du Tags hast, die auf Commits zeigen, die die Datei config.bak.js enthalten haben, solltest du auch die Tags force-pushen:
git push origin --force --tags