Git LFS

Mit Git LFS - Large File System erhalten wir eine Lösung zu einem vermeintlichen Horror-Szenario für ein Git-Repo: große binäre Dateien.

  • Sammlung von Screenshots / Hintergrundbildern

  • Große Anzahl von 3D-Modellen, Audio oder Video Dateien

Der folgende Screenshot zeigt die 2-fache Überarbeitung einer großen Bilddatei mit Ursprungsgröße von 50 MiB. Nach den zwei Überarbeitungen sid die Git-relevanten Infos auf 150 MiB angewachsen! Das Bild ist jetzt halt in 3 Snapshots (Commits) unseres Projekts!

YouTube: Atlassion - Tim Pettersen - What is Git LFS?

YouTube: Atlassion - Tim Pettersen - What is Git LFS?

Wir starten aber wieder mit einer kleinen Linkliste zu Git LFS - Git Large File Storage.

Für die weiteren Erklärungen zitiere ich einen der Kollegen aus der Linkliste zum Thema Git LFS:

Ich möchte gar nicht lange um den heißen Brei herumreden: Git ist eine Versionsverwaltung, die hervorragend mit Textdateien bzw. Source Code zurechtkommt, aber nicht mit Binärdateien (Bilder, Musik, Videos, etc.).

Jetzt ist es aber so, dass man gelegentlich doch gleichzeitig Code und Binärdateien in einem Repository braucht.

Bis ca. 1 GB Daten klappt das auch noch recht gut, aber darüber wird’s wirklich unangenehm. Leider sind meine Repos, bei denen ich Binärdateien mit drin habe, mittlerweile 2-50 GB groß, und um’s kurz zu sagen: Das macht einfach keinen Spaß mehr.

—Elia „KopfKrieg“, 26. Apr. 2022, kopfkrieg.dev/2022/04/26/git-lfs/

Die Git Extension Git LFS löst dieses Problem auf. Welches Problem war das nochmal? Bei Git handelt es sich um ein Distributed Version Management. Beim Klonen des Repos erhält ein Nutzer alle Versionen aller Dateien nach Abschluss des Clone-Vorgang. Das ist bei großen binären Dateien das Problem!

Git LFS erweitert die Fähigkeiten von Git um einen LFS store, der die Dateien außerhalb der Git-Arbeitsumgebung speichert. In den Snapshots/Commits verweisen nur noch Links auf die entsprechenden Dateiversionen. Bei einem Pull wird nur die letzte Version heruntergeladen.

YouTube: git (lfs) pull - Tim Pettersen - What is Git LFS?

YouTube: git (lfs) pull - Tim Pettersen - What is Git LFS?

Und selbstverständlich erhält man auch auf den anderen Commits die entsprechenden Bildversionen bereitgestellt.

Wenn man weiß, dass man es mit einem LFS unterstüzten Repo zu tun hat, dann kann man diese Info beim Klonen hinzufügen: git lfs clone. Dadurch wartet man auf die Beendiugung des Checkouts für den fraglichen Commit und erst danach werden die fraglichen LFS-Dateien in einem Zug und mit parallelisierten Downloads im LFS-Cache bereitgestellt.