Anleitung um Binary Large Objects (BLOB) aus der Githistorie zu entfernen, aber anschließend weiterhin öffentlich verfügbar zu halten.
Disclaimer: Dies ist keine Schritt-für-Schritt Anleitung um alle möglichen Fälle abzudecken, sondern eher eine Übersicht über die zur Verfügung stehenden Werkzeuge. Wenn dein Fall über das geschilderte Beispiel hinaus geht, wende dich an die Documentation der aufgeführten Werkzeuge.
Öffentliche/Geteilte Repos
Das ist der generellere Fall, da die Optionen für private Repos nicht ohne weiteres zur Veröffentlichung deiner Daten geeignet sind.
- Find die Binärdateien, die du in deinem Repo committet hast
- Commandlinewerkzeuge wie
ncdukönnen dir bei der Suche großer Dateien helfen. - Zum Zweck dieses Beispiels nehmen wir an du hast
data/my_training_set.bingefunden.
- Commandlinewerkzeuge wie
- Lege ein Backup des BLOBs außerhalb des Repos an
zip ../data.zip data/my_training_set.bin
- Überprüfe die Historie des BLOBs
tig data/my_training_set.bin
- Entferne die Datei aus deiner Historie
- 4.1 In einem kleinen Repo
git filter-branch --tree-filter 'rm -f data/my_training_set.bin'- filter-branch arbeitet sehr langsam bei einer großen Anzahl Commits.
- 4.2 In einem großen Repo
- Find die Commit ID, zu der
data/my_training_set.binangelegt wurde, z.B. mittig data/my_training_set.bin git rebase -i <commit-ID>~1- z.B.
git rebase -i 272e7241548d564c3b13f15865cc5fb3c8058e82~1 - Folge der Beschreibung in deinem Editor um deinen Commit zum bearbeiten auszuwählen.
git rm data/my_training_set.bingit commit --amendgit rebase --continue- Wiederhole 4.2 falls du im Verlauf deiner Historie Änderungen an dem BLOB committet hast.
- Find die Commit ID, zu der
- 4.1 In einem kleinen Repo
- Verteile die neue Historie
git push --force- Falls beim pushen ein Fehler auftritt, stelle sicher, dass deine Repoeinstellungen im GitLab dir Forcepushen erlauben.
- Verteile dein
data.zip
Die Uni bietet begrenzte, aber immerhin vorhandene, Möglichkeiten große Dateien zu veröffentlichen- faubox
wwwcip.cs.fau.de/~<dein_idm_nutzername>was zu~/.www/in deinem CIP Nutzerhome zeigt, sofern du einen CIP Account hast. Weiter kannst du Symlinks nach/proj/ciptmp/<your_idm_username>/anlegen um mehr Platz zu haben. Beachte aber, dass es keine Backups des ciptmps gibt.- Falls keine dieser Möglichkeiten für dich anwendbar ist, bitte deinen Lehrstuhl dir eine Platform zur Veröffentlichung von Binärdateien zur Verfügung zu stellen.
Private Repos
Zusätzlich zu den Möglichkeiten für öffentliche Repos kannst du git annex verwenden
um Binärdateien in einem git Repo zu verwalten. Siehe Annex Dokumentation.
Du kannst das WebDAV Remote verwenden um die FAUBox als Speicher an deinen Annex anzubinden.
Siehe Annex WebDAV Dokumentation
und FAUBox WebDAV Dokumentation.
Allerdings wäre eine GitLab ähnliche Platform mit Annexunterstützung notwendig, um
git annex für öffentliche Repositories zu verwenden. Die FAU bietet derzeit keine
solche Platform an.
Weitere Gedanken
- Lege alle BLOBs in ein
./bindataVerzeichnis in deinem Repo, füge/bindatain deiner.gitignorehinzu und lege Symlinks an alaln -s bindata/my_training_set.bin data/my_training_set.binsodass du deine Pfade nicht anpassen musst. Um eine neue Version deiner Binärdateien einzupflegen, entpacke einfach das neuedata.zipnachbindata. - Falls du bereits in der Vergangenheit BLOBs committet und in der Zwischenzeit wieder gelöscht hast, sind diese immernoch Teil deiner git Historie, tauchen aber nicht in einem aktuellen Checkout auf. Stelle sicher auch solche BLOBs vollständig aus deiner Historie zu entfernen.