main content
wiki/ documentation/ gitlab/ HowTo Historie umschreiben

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.

  1. Find die Binärdateien, die du in deinem Repo committet hast
    • Commandlinewerkzeuge wie ncdu können dir bei der Suche großer Dateien helfen.
    • Zum Zweck dieses Beispiels nehmen wir an du hast data/my_training_set.bin gefunden.
  2. Lege ein Backup des BLOBs außerhalb des Repos an
    • zip ../data.zip data/my_training_set.bin
  3. Überprüfe die Historie des BLOBs
    • tig data/my_training_set.bin
  4. 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.bin angelegt wurde, z.B. mit tig 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.bin
      • git commit --amend
      • git rebase --continue
      • Wiederhole 4.2 falls du im Verlauf deiner Historie Änderungen an dem BLOB committet hast.
  5. Verteile die neue Historie
    • git push --force
    • Falls beim pushen ein Fehler auftritt, stelle sicher, dass deine Repoeinstellungen im GitLab dir Forcepushen erlauben.
  6. 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