2010-12-30 1 views
30

Ich versehentlich einige große binäre Daten in einige Commits verpflichtet. Seitdem habe ich mein .gitignore aktualisiert, und diese Dateien werden nicht mehr festgeschrieben. Aber ich würde gerne in die älteren Commits zurückkehren und diese Daten selektiv aus dem Repository entfernen, indem ich ein paar Verzeichnisse entferne, die in .gitignore hätten sein sollen. Ich möchte die Commits nicht selbst entfernen.Binäre Daten aus einem Git-Repository nach der Tat zu entfernen

Wie würde ich das erreichen? Meine bevorzugte Methode wäre eine Möglichkeit, die .gitignore-Regeln rückwirkend auf alte Commits anzuwenden ... eine Antwort, die diese Methode verwendet, wäre auch für andere ziemlich nützlich, da ich sicher bin, dass mein Problem nicht eindeutig ist. Es würde auch schnell auf eine allgemeine Lösung angewendet werden, ohne viel Anpassung für die eindeutige Verzeichnisstruktur jedes Benutzers.

Ist dies möglich, entweder der einfache Weg, den ich oben vorgeschlagen habe, oder auf eine etwas kompliziertere Art und Weise?

+5

Siehe [git: Dateien oder Ordner aus dem Verlauf für immer entfernen] (http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/) und [Remove große Binärdateien aus dem Repository] (https://groups.google.com/forum/#!topic/github/ghXxynyhj0o). Sie sollten helfen. – marcog

+1

Googling für 'Git Datei aus der Geschichte entfernen' würde Ihr Problem gelöst haben. Übrigens wird es wahrscheinlich nicht viel helfen, eine Änderung von .gitignore in die Vorgeschichte zu retransformieren und das .gitignore irgendwie rückwirkend auf alle Commits anzuwenden, da manchmal ignorierte Dateien absichtlich eingecheckt werden, und das würden Sie nicht wollen verlier diese. –

Antwort

11

Die Lösung in this answer arbeitete perfekt für mich:

java -jar bfg.jar --delete-files *.{jpg,png,mp4,m4v,ogv,webm} ${bare-repo-dir}; 

(Außer BFG sicher macht es nicht:

Sie können auch mit einem tool like bfg repo cleaner, wie in this answer Ihren sauberen Prozess testen lösche alles in deinem letzten Commit, also musst du diese Dateien im aktuellen Index entfernen und einen "sauberen" Commit machen. Alle anderen vorherigen Commits werden von BFG gelöscht)

+3

Ich hatte einen Ordner (versehentlich) mit allen binären Dateien und mit diesem: ** java -jar bfg.jar --Delete-Ordner Downloads ** mein Repo kam von 250MB auf 20MB! –

+0

@akauppi - Seine Antwort ist über Git. Er verweist auf ein Java-Tool (bfg), das Dateien aus einem Git-Repository entfernt, basierend auf der Dateinamenserweiterung. – mwakerman

+0

@mwakerman Ich habe festgestellt, dass ich andere Dateien als Java entfernen möchte, daher wäre hier eine allgemeine .git-Lösung vorzuziehen. – ryanjdillon

Verwandte Themen