Git is een veelgebruikte tool voor versiebeheer die helpt bij het beheren van softwareprojecten, data science-workflows en zelfs documentatierepositories. Traditionele Git heeft echter beperkingen bij het omgaan met grote bestanden. Grote bestanden worden bij elke commit gedupliceerd, wat leidt tot een opgeblazen repository en tragere workflows doordat meerdere kopieën van grote bestanden moeten worden gekopieerd bij het ophalen van wijzigingen. Om die reden kan het beheren van grote bestanden met Git inefficiënt worden om de volgende redenen:
Grote repository-omvang: Grote bestanden rechtstreeks in een Git-repository opslaan vergroot de totale omvang, waardoor klonen en fetchen traag wordt, vooral bij werken met een remote repository waarbij bestanden moeten worden geüpload/gedownload.
Inefficiënte opslag en versiebeheer: Elke keer dat een groot bestand wordt aangepast, slaat Git een nieuwe versie op in de geschiedenis, wat snel tot een opgeblazen repository leidt.
Prestatieproblemen: Bij een grote repository worden Git-bewerkingen (zoals klonen, pullen, pushen) aanzienlijk trager en is meer opslagruimte nodig.
In deze gids kijken we uitgebreid naar Git Large File Storage (Git LFS), een Git-extensie die helpt bij grote bestanden in je repository. Het stelt ons in staat wijzigingen in grote bestanden efficiënter op te slaan zonder extra duplicatie of opslagruimte. Je zou het moeten gebruiken wanneer je verwacht grote binaire bestanden in je repository te hebben. Ik begin met in meer detail uit te leggen wat het is, hoe het werkt, wanneer je het gebruikt en hoe je het effectief instelt.
Git Large File Storage (Git LFS) is een extensie voor Git die het werken met grote bestanden verbetert.
Het verandert hoe Git fetchen en klonen afhandelt door functionaliteit toe te voegen voor lazy fetching van data uit een remote repository en door slimme bestandsbeheerfuncties aan Git toe te voegen.
Voor de rest is de gebruikerservaring naadloos en hetzelfde als bij normale Git.
Hoe Git LFS verschilt van standaard Git-tracking
In traditionele Git slaan we de volledige geschiedenis van de repository op in de map .git. Dit omvat de daadwerkelijke tekstbestanden die in de loop van de tijd zijn gewijzigd. Daarnaast worden volledige repositories gedownload wanneer we git fetch of git clone aanroepen, zodat we alle bestanden direct beschikbaar hebben. Wanneer we Git LFS gebruiken, verandert dit een paar dingen.
Ten eerste vervangt Git LFS grote bestanden door lichte pointers naar remote opslag, waardoor het niet nodig is elk bestand op te slaan. Ten tweede worden grote bestanden alleen gedownload wanneer je naar de branch uitcheckt, wat betekent dat we grote bestanden pas downloaden wanneer we er klaar voor zijn om eraan te werken.
Tot slot beheert het de opslag van je lokale repository om oude versies van bestanden op te schonen en zo een schone werkomgeving te behouden.
Hoe werkt Git LFS?
Git LFS volgt een pointer-gebaseerd opslagmechanisme. Zoals eerder genoemd: wanneer je een bestand opgeeft voor LFS-tracking, vervangt Git LFS het in de repository door een pointerbestand en plaatst het ook een lokale kopie in de cache.
Wanneer je commits pusht, wordt de lokale cache bijgewerkt naar een remote store (bijv. GitHub-, GitLab-, Bitbucket-LFS-servers). Als er wijzigingen zijn en je checkt uit, dan werken deze wijzigingen je lokale cache bij om je de meest recente werkende kopie te geven.
Wil je inzicht in een van de populairste remote repositories, GitHub? Bekijk dan deze cursus Inleiding tot GitHub.
Er zijn veel voordelen aan het gebruik van Git LFS. Het houdt repository-omvang klein en beheersbaar. Het verbetert ook de prestaties voor teams die met grote bestanden werken. En door onnodige duplicatie van grote bestanden te vermijden, blijft de omvang van je lokale repository beheersbaar.
Git LFS instellen
Voordat je Git LFS gaat gebruiken, zijn er een paar stappen om het in te richten. Het is een relatief eenvoudig proces dat het installeren van de extensie omvat. Als je bestaande repositories hebt, moet je ze migreren. Als je een nieuwe repository maakt, kun je Git LFS gewoon initialiseren.
Git LFS installeren
Om Git LFS te gebruiken, moet je het op je systeem installeren. De eenvoudigste manier is om naar de website van git-lfs te gaan en de bestanden te installeren. Zodra je dat hebt gedaan, voer je één keer git lfs install uit in je opdrachtconsole om Git LFS volledig te initialiseren en te installeren.
Git LFS gebruiken
Zodra het is geïnstalleerd, moet je ervoor zorgen dat Git LFS is geconfigureerd voor elke repository. Verschillende remote Git-trackers (bijv. GitHub vs Bitbucket) hebben licht afwijkende stappen. Volg het beste de aanbevolen stappen voor jouw specifieke Git-remote. In grote lijnen: als je een nieuwe repository initialiseert, kun je in die repository git lfs install uitvoeren om de hooks te initialiseren en daarna bestanden toevoegen om te tracken. Als je een bestaande repository hebt, kun je git lfs migrate gebruiken en vervolgens de opschoningsprocedures voor de .git-map volgen:
git reflog expire --expire-unreachable=now --all
git gc --prune=nowMogelijk gemaakt door
Git LFS gebruiken in een project
Laten we enkele uses van Git LFS in een project doornemen. We behandelen de stappen voor het tracken, committen, klonen en pullen van grote bestanden uit een Git LFS-repository.
Grote bestanden tracken (git lfs track)
Om specifieke bestandstypen te tracken, kunnen we de opdracht git lfs track <file type> gebruiken. Als ik bijvoorbeeld CSV-bestanden wil tracken, zou ik de opdracht schrijven als: git lfs track "*.csv". Dit voegt ook informatie toe aan ons .gitattributes-bestand om ervoor te zorgen dat we Git LFS gebruiken voor dit specifieke bestand. We moeten nu eerst ons .gitattributes-bestand pushen om ervoor te zorgen dat we LFS-bestanden correct tracken.
git add .gitattributes
git commit -m "Adding LFS .gitattributes"
git push origin mainMogelijk gemaakt door
Grote bestanden toevoegen en committen
Na het instellen van tracking kun je het zoals gewoonlijk toevoegen en committen:
git add largefile.csv
git commit -m "Adding large file with Git LFS"
git push origin mainMogelijk gemaakt door
Achter de schermen slaat Git LFS het bestand apart op en vervangt het door een pointer in de repository. Het zou een vrij naadloze ervaring moeten zijn.
Repositories klonen met Git LFS (git lfs clone)
Als je een nieuwere versie van Git (>= 2.3.0) hebt, dan zou de opdracht git clone automatisch moeten werken voor zowel je LFS- als niet-LFS-bestanden. Als je een oudere versie van Git gebruikt, moet je de specifieke opdracht git lfs clone gebruiken. Dit werkt anders dan je gebruikelijke clone, omdat het verwijst naar de pointerinformatie voor grote bestanden en alleen de werkende kopie van elk groot bestand kloont. Voor meer informatie over klonen in Git, bekijk de volgende tutorial over Git Clone Branch.
Grote bestanden pullen (git lfs pull)
Als je je grote LFS-bestanden uit je repository wilt fetchen en uitchecken, kun je de functie git lfs pull gebruiken. Dit is apart van een eenvoudige git pull, die alleen de git-bestanden pullt.
Hier is een voorbeeldworkflow:
git checkout main # check out your main branch
git pull # pull latest git files from the remote, for this branch
git lfs pull # pull latest git lfs files from the remote, for this branchMogelijk gemaakt door
Best practices voor het gebruik van Git LFS
Hoewel Git LFS een geweldige oplossing is, kan het nog steeds zijn eigen reeks problemen met zich meebrengen en het is niet bedoeld als universele oplossing. Hanteer de volgende best practices wanneer je Git LFS gebruikt om er het meeste uit te halen:
Gebruik Git LFS alleen voor grote binaire bestanden, niet voor code of kleine tekstbestanden.
Ruim regelmatig onnodige bestanden op met: git lfs prune
Vermijd het tracken van volledige mappen; dat kan leiden tot prestatieproblemen en bloat
Zorg dat alle samenwerkers Git LFS hebben geïnstalleerd om ontbrekende bestanden te voorkomen.
Als je deze algemene richtlijnen volgt, zal Git LFS een geweldig hulpmiddel voor je zijn!
Veelvoorkomende problemen en hoe ze op te lossen
Omdat Git LFS een extensie op Git is, brengt het zijn eigen scala aan problemen met zich mee. Dit geldt vooral omdat het afhankelijk is van remote repositories die hun eigen issues hebben. Hier zijn enkele veelvoorkomende problemen die je kunt tegenkomen bij het gebruik van Git LFS en hun oplossingen.
Git LFS-authenticatieproblemen
Er zijn talloze manieren waarop je authenticatieproblemen met Git LFS kunt tegenkomen. Controleer het volgende om te zorgen dat je de juiste inloggegevens aan jouw kant hebt:
Gebruik de juiste SSH-configuratie met git config lfs.url ssh://<git-url>
Controleer of je lees-/schrijfrechten hebt op de bovenliggende branch, omdat Git LFS vaak naar de parent trackt
Probeer volledig schoon te fetchen/klonen vanaf de remote repository
Als je problemen blijft houden en je bent niet de beheerder, neem dan contact op met de eigenaar van het project om te zien of die je kan helpen met de rechten.
Opslaglimieten en quota voor Large File Storage
Diensten kunnen quota hebben voor Git LFS-opslag. Zo heeft GitHub een limiet van 2 GB voor Free- en Pro-gebruikers, met een limiet van 5 GB per bestand voor Enterprise Cloud-gebruikers. Zorg dat je geen bestanden uploadt die groter zijn dan de limiet van jouw dienst om fouten te voorkomen.
Bestaande repositories migreren naar Git LFS
Als een repository al grote bestanden bevat, migreer ze dan met:
Dit vervangt grote bestanden achteraf door LFS-pointers.
Conclusie
Git LFS is een essentieel hulpmiddel voor het efficiënt beheren van grote bestanden, terwijl repositories snel en licht blijven. Door Git LFS te gebruiken, kunnen ontwikkelaars hun grotere repositorybestanden goed beheren. Zolang je best practices volgt om bloat te minimaliseren, is LFS een grote hulp bij je bestands-tracking. Als je meer wilt leren over Git, probeer dan de volgende bronnen:
Wat gebeurt er als ik een repository met Git LFS-bestanden kloon?⌄
Het uitvoeren van git clone op nieuwere versies van Git haalt automatisch de repository en LFS-pointers op. Als je een oudere versie van Git gebruikt, moet je git lfs pull uitvoeren om de daadwerkelijke grote bestanden te downloaden. Als alternatief doet git lfs clone dit automatisch.
Hoe kan ik controleren welke bestanden door Git LFS worden getrackt?⌄
Voer git lfs track uit om de getrackte bestands-patronen te zien, en git lfs ls-files om de daadwerkelijke bestanden te tonen die via LFS zijn opgeslagen.
Wat als mijn Git LFS-opslag opraakt op GitHub of een andere hostingservice?⌄
Diensten zoals GitHub hanteren opslaglimieten. Je kunt opslag beheren met git lfs prune, extra ruimte kopen of een alternatieve externe opslagoplossing gebruiken.
Kan ik stoppen met het gebruiken van Git LFS nadat ik het heb ingeschakeld?⌄
Ja, maar je moet je bestanden terug migreren naar standaard Git met git lfs migrate export --include="*.filetype" om LFS-tracking te verwijderen.
Git is een veelgebruikte tool voor versiebeheer die helpt bij het beheren van softwareprojecten, data science-workflows en zelfs documentatierepositories. Traditionele Git heeft echter beperkingen bij het omgaan met grote bestanden. Grote bestanden worden bij elke commit gedupliceerd, wat leidt tot een opgeblazen repository en tragere workflows doordat meerdere kopieën van grote bestanden moeten worden gekopieerd bij het ophalen van wijzigingen. Om die reden kan het beheren van grote bestanden met Git inefficiënt worden om de volgende redenen:
In deze gids kijken we uitgebreid naar Git Large File Storage (Git LFS), een Git-extensie die helpt bij grote bestanden in je repository. Het stelt ons in staat wijzigingen in grote bestanden efficiënter op te slaan zonder extra duplicatie of opslagruimte. Je zou het moeten gebruiken wanneer je verwacht grote binaire bestanden in je repository te hebben. Ik begin met in meer detail uit te leggen wat het is, hoe het werkt, wanneer je het gebruikt en hoe je het effectief instelt.
Als je nieuw bent met Git, bekijk dan onze gids Hoe leer je Git en de Cursus Inleiding tot Git.
Wat is Git LFS?
Git Large File Storage (Git LFS) is een extensie voor Git die het werken met grote bestanden verbetert.
Het verandert hoe Git fetchen en klonen afhandelt door functionaliteit toe te voegen voor lazy fetching van data uit een remote repository en door slimme bestandsbeheerfuncties aan Git toe te voegen.
Voor de rest is de gebruikerservaring naadloos en hetzelfde als bij normale Git.
Hoe Git LFS verschilt van standaard Git-tracking
In traditionele Git slaan we de volledige geschiedenis van de repository op in de map
.git. Dit omvat de daadwerkelijke tekstbestanden die in de loop van de tijd zijn gewijzigd. Daarnaast worden volledige repositories gedownload wanneer wegit fetchofgit cloneaanroepen, zodat we alle bestanden direct beschikbaar hebben. Wanneer we Git LFS gebruiken, verandert dit een paar dingen.Ten eerste vervangt Git LFS grote bestanden door lichte pointers naar remote opslag, waardoor het niet nodig is elk bestand op te slaan. Ten tweede worden grote bestanden alleen gedownload wanneer je naar de branch uitcheckt, wat betekent dat we grote bestanden pas downloaden wanneer we er klaar voor zijn om eraan te werken.
Tot slot beheert het de opslag van je lokale repository om oude versies van bestanden op te schonen en zo een schone werkomgeving te behouden.
Hoe werkt Git LFS?
Git LFS volgt een pointer-gebaseerd opslagmechanisme. Zoals eerder genoemd: wanneer je een bestand opgeeft voor LFS-tracking, vervangt Git LFS het in de repository door een pointerbestand en plaatst het ook een lokale kopie in de cache.
Wanneer je commits pusht, wordt de lokale cache bijgewerkt naar een remote store (bijv. GitHub-, GitLab-, Bitbucket-LFS-servers). Als er wijzigingen zijn en je checkt uit, dan werken deze wijzigingen je lokale cache bij om je de meest recente werkende kopie te geven.
Wil je inzicht in een van de populairste remote repositories, GitHub? Bekijk dan deze cursus Inleiding tot GitHub.
Er zijn veel voordelen aan het gebruik van Git LFS. Het houdt repository-omvang klein en beheersbaar. Het verbetert ook de prestaties voor teams die met grote bestanden werken. En door onnodige duplicatie van grote bestanden te vermijden, blijft de omvang van je lokale repository beheersbaar.
Git LFS instellen
Voordat je Git LFS gaat gebruiken, zijn er een paar stappen om het in te richten. Het is een relatief eenvoudig proces dat het installeren van de extensie omvat. Als je bestaande repositories hebt, moet je ze migreren. Als je een nieuwe repository maakt, kun je Git LFS gewoon initialiseren.
Git LFS installeren
Om Git LFS te gebruiken, moet je het op je systeem installeren. De eenvoudigste manier is om naar de website van git-lfs te gaan en de bestanden te installeren. Zodra je dat hebt gedaan, voer je één keer
git lfs installuit in je opdrachtconsole om Git LFS volledig te initialiseren en te installeren.Git LFS gebruiken
Zodra het is geïnstalleerd, moet je ervoor zorgen dat Git LFS is geconfigureerd voor elke repository. Verschillende remote Git-trackers (bijv. GitHub vs Bitbucket) hebben licht afwijkende stappen. Volg het beste de aanbevolen stappen voor jouw specifieke Git-remote. In grote lijnen: als je een nieuwe repository initialiseert, kun je in die repository
git lfs installuitvoeren om de hooks te initialiseren en daarna bestanden toevoegen om te tracken. Als je een bestaande repository hebt, kun jegit lfs migrategebruiken en vervolgens de opschoningsprocedures voor de .git-map volgen:Git LFS gebruiken in een project
Laten we enkele uses van Git LFS in een project doornemen. We behandelen de stappen voor het tracken, committen, klonen en pullen van grote bestanden uit een Git LFS-repository.
Grote bestanden tracken (git lfs track)
Om specifieke bestandstypen te tracken, kunnen we de opdracht
git lfs track <file type>gebruiken. Als ik bijvoorbeeld CSV-bestanden wil tracken, zou ik de opdracht schrijven als:git lfs track "*.csv". Dit voegt ook informatie toe aan ons.gitattributes-bestand om ervoor te zorgen dat we Git LFS gebruiken voor dit specifieke bestand. We moeten nu eerst ons.gitattributes-bestand pushen om ervoor te zorgen dat we LFS-bestanden correct tracken.Grote bestanden toevoegen en committen
Na het instellen van tracking kun je het zoals gewoonlijk toevoegen en committen:
Achter de schermen slaat Git LFS het bestand apart op en vervangt het door een pointer in de repository. Het zou een vrij naadloze ervaring moeten zijn.
Repositories klonen met Git LFS (git lfs clone)
Als je een nieuwere versie van Git (>= 2.3.0) hebt, dan zou de opdracht git clone automatisch moeten werken voor zowel je LFS- als niet-LFS-bestanden. Als je een oudere versie van Git gebruikt, moet je de specifieke opdracht git lfs clone gebruiken. Dit werkt anders dan je gebruikelijke clone, omdat het verwijst naar de pointerinformatie voor grote bestanden en alleen de werkende kopie van elk groot bestand kloont. Voor meer informatie over klonen in Git, bekijk de volgende tutorial over Git Clone Branch.
Grote bestanden pullen (git lfs pull)
Als je je grote LFS-bestanden uit je repository wilt fetchen en uitchecken, kun je de functie
git lfs pullgebruiken. Dit is apart van een eenvoudigegit pull, die alleen de git-bestanden pullt.Hier is een voorbeeldworkflow:
Best practices voor het gebruik van Git LFS
Hoewel Git LFS een geweldige oplossing is, kan het nog steeds zijn eigen reeks problemen met zich meebrengen en het is niet bedoeld als universele oplossing. Hanteer de volgende best practices wanneer je Git LFS gebruikt om er het meeste uit te halen:
git lfs pruneAls je deze algemene richtlijnen volgt, zal Git LFS een geweldig hulpmiddel voor je zijn!
Veelvoorkomende problemen en hoe ze op te lossen
Omdat Git LFS een extensie op Git is, brengt het zijn eigen scala aan problemen met zich mee. Dit geldt vooral omdat het afhankelijk is van remote repositories die hun eigen issues hebben. Hier zijn enkele veelvoorkomende problemen die je kunt tegenkomen bij het gebruik van Git LFS en hun oplossingen.
Git LFS-authenticatieproblemen
Er zijn talloze manieren waarop je authenticatieproblemen met Git LFS kunt tegenkomen. Controleer het volgende om te zorgen dat je de juiste inloggegevens aan jouw kant hebt:
git config lfs.url ssh://<git-url>Als je problemen blijft houden en je bent niet de beheerder, neem dan contact op met de eigenaar van het project om te zien of die je kan helpen met de rechten.
Opslaglimieten en quota voor Large File Storage
Diensten kunnen quota hebben voor Git LFS-opslag. Zo heeft GitHub een limiet van 2 GB voor Free- en Pro-gebruikers, met een limiet van 5 GB per bestand voor Enterprise Cloud-gebruikers. Zorg dat je geen bestanden uploadt die groter zijn dan de limiet van jouw dienst om fouten te voorkomen.
Bestaande repositories migreren naar Git LFS
Als een repository al grote bestanden bevat, migreer ze dan met:
Dit vervangt grote bestanden achteraf door LFS-pointers.
Conclusie
Git LFS is een essentieel hulpmiddel voor het efficiënt beheren van grote bestanden, terwijl repositories snel en licht blijven. Door Git LFS te gebruiken, kunnen ontwikkelaars hun grotere repositorybestanden goed beheren. Zolang je best practices volgt om bloat te minimaliseren, is LFS een grote hulp bij je bestands-tracking. Als je meer wilt leren over Git, probeer dan de volgende bronnen: