Git

Git LFS

Git LFS
A Git a szoftverfejlesztők de facto verziókezelő rendszerévé vált a világ minden tájáról. Ez a nyílt forráskódú, elosztott verzióvezérlő rendszer gyorsabb, mint versenytársai. Könnyen használható a kód elágazásához és egyesítéséhez. Teljesítményproblémája van azonban a nagy bináris fájlokkal. A probléma megoldására a Git Large File Storage (LFS) került kifejlesztésre.

A Git nagy fájlproblémája

Hagyományosan bizonyos vállalatok és intézmények távol maradtak a Git-től a nagy bináris fájlkezelés hatékonyságának hiánya miatt. A videojáték-fejlesztőknek és a médiacégeknek összetett textúrákkal, teljes mozgású videókkal és kiváló minőségű audiofájlokkal kell megküzdeniük. A kutatóintézeteknek nyomon kell követniük a nagy adatkészleteket, amelyek gigabájt vagy terabájt lehet. Git nehezen tudja fenntartani ezeket a nagy fájlokat.

A probléma megértéséhez meg kell vizsgálnunk, hogy a Git hogyan követi nyomon a fájlokat. Valahányszor elkötelezettség van, Git létrehoz egy objektumcsomópontot egy mutatóval a szülőjéhez vagy több szülőjéhez. A Git adatmodell irányított aciklusos gráfként (DAG) ismert. A DAG-modell biztosítja, hogy a szülő-gyermek kapcsolat soha nem képezhet ciklust.

Ellenőrizhetjük a DAG modell belső működését. Íme egy példa a tároló három elkövetésére:

$ git log - online
2beb263 Commit C: hozzáadott kép1.jpeg
866178e B kötelezettség: tegye hozzá b.txt
d48dd8b Commit A: adjon hozzá egy.txt

Az A és B kötelezettségvállalásba felvettük az a szöveges fájlt.txt és b.txt. Ezután a Commit C-ben felvettünk egy image1 nevű képfájlt.jpeg. A DAG-t az alábbiak szerint jeleníthetjük meg:

C kötelezettségvállalás B kötelezettségvállalás A kötelezettségvállalás A
2beb263 -> 866178e -> d48dd8b

Ha az utolsó parancsot a következő paranccsal ellenőrizzük:

$ git macskafájl -p 2beb263
fa 7cc17ba5b041fb227b9ab5534d81bd836183a4e3
szülő 866178e37df64d9f19fa77c00d5ba9d3d4fc68f5
szerző Zak H 1513259427 -0800
vállalkozó Zak H 1513259427 -0800
Commit C: hozzáadott kép1.jpeg

Láthatjuk, hogy a Commit C-nek (2beb263) a Commit B (866178e) a szülője. Most, ha megvizsgáljuk a Commit C faobjektumát (7cc17ba), láthatjuk a foltokat (bináris nagy objektumok):

$ git macskafájl -p 7cc17ba
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 blob a44a66f9e06a8faf324d3ff3e11c9fa6966bfb56 image1.jpeg

Ellenőrizhetjük a kép foltjának méretét:

$ git macskafájl -s a44a66f9e
871680

Git nyomon követi a fa szerkezetének változását. Módosítsuk a képet1.jpeg és ellenőrizze az előzményeket:

$ git log - online
2e257db Commit D: módosított kép1.jpeg
2beb263 Commit C: hozzáadott kép1.jpeg
866178e B kötelezettség: írja be b.txt
d48dd8b Commit A: adjon hozzá egy.txt

Ha ellenőrizzük a Commit D objektumot (2e257db):

$ git macskafájl -p 2e257db
fa 2405fad67610acf0f57b87af36f535c1f4f9ed0d
szülő 2beb263523725e1e8f9d96083140a4a5cd30b651
szerző Zak H 1513272250 -0800
vállalkozó Zak H 1513272250 -0800
D követés: módosított kép1.jpeg

És a benne lévő fa (2405fad):

$ git macskafájl -p 2405fad
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 blob cb4a0b67280a92412a81c60df36a15150e713095 image1.jpeg

Figyelje meg, hogy az image1 SHA-1 kivonata.jpeg megváltozott. Ez azt jelenti, hogy új blobot hozott létre az image1 számára.jpeg. Ellenőrizhetjük az új folt méretét:

$ git cat-file -s cb4a0b6
1063696

Itt van egy módszer a fenti DAG szerkezet megjelenítésére:

Kötelezettségvállalás D Kötelezettségvállalás C Kötelezettségvállalás B kötelezettségvállalás A
| | | |
2e257db -> 2beb263 -> 866178e -> d48dd8b
| | | |
Fa4 Fa3 Fa2 Fa1
| | | |
Blobs Blobs Blobs Blobs

Minden elkötelezett objektum fenntartja a saját fáját. A fák belsejében foltokat tartanak fenn. A Git úgy optimalizálja a helyet, hogy megbizonyosodik arról, hogy csak a különbségeket tárolja és tömörítést használ tárolásra. De a bináris fájlok megváltoztatásához a Gitnek teljes fájlokat kell tárolnia a foltokban, mert nehéz meghatározni a különbségeket. A kép-, video- és audiofájlok már tömörítve vannak. Ennek eredményeként a módosított bináris fájl minden egyes példányára a fa egy nagy blobra kerül.

Gondoljunk egy példára, ahol többször módosítunk egy 100 MB-os képfájlt.

Vállalás C -> Vállalás B -> Vállalás A
| | |
Fa3 Fa2 Fa1
| | |
Blob3 Blob2 Blob1
300 MB 200 MB 100 MB

Minden alkalommal, amikor megváltoztatjuk a fájlt, Gitnek létre kell hoznia egy 100 MB-os blobot. Tehát csak 3 végrehajtás után a Git adattár 300 MB. Láthatja, hogy a Git adattár mérete gyorsan felrobbanhat. Mivel a Git egy elosztott verzióvezérlő, ezért az egész adattárat letölti a helyi példányra, és sokat dolgozik az ágakkal. Tehát a nagy foltok a teljesítmény szűk keresztmetszetévé válnak.

A Git LFS megoldja a problémát azáltal, hogy a foltokat könnyű pointer fájlokkal (PF) helyettesíti, és létrehoz egy mechanizmust a foltok máshol történő tárolására.

Vállalás C -> Vállalás B -> Vállalás A
| | |
Fa3 Fa2 Fa1
| | |
PF3 PF2 PF1

A Git helyben tárolja a foltokat a Git LFS gyorsítótárban, és távolról a Git LFS áruházban tárolja őket a GitHub vagy a BitBucket oldalon.

PF1 -> Blob1
PF2 -> Blob2
PF3 -> Blob3

Most, amikor a Git adattárral foglalkozik, a könnyű PF fájlokat fogják használni a rutin műveletekhez. A foltokat csak szükség esetén lehet letölteni. Például, ha a Commit C-t választja, akkor a Git LFS megkeresi a PF3 mutatót, és letölti a Blob3 szoftvert. Tehát a működő tárház karcsúbb lesz, és a teljesítmény jobb lesz. Nem kell aggódnia a mutatófájlok miatt. Git LFS fogja kezelni őket a kulisszák mögött.

A Git LFS telepítése és futtatása

Korábban megpróbálták megoldani a Git large file problémát. De a Git LFS sikeres volt, mert könnyen használható. Csak telepítenie kell az LFS-t és meg kell mondania, mely fájlokat kell nyomon követnie.

A Git LFS a következő parancsok segítségével telepíthető:

$ sudo apt-get install software-properties-common
$ curl -s https: // packagecloud.io / install / repositories / github / git-lfs / script.deb.sh | sudo bash
$ sudo apt-get install git-lfs
A $ git lfs telepítése

A Git LFS telepítése után nyomon követheti a kívánt fájlokat:

$ git lfs track "*.jpeg "
Követés "*.jpeg "

A kimenet megmutatja, hogy a Git LFS nyomon követi a JPEG fájlokat. Amikor elkezdi követni az LFS-t, megtalálja a .gitattributes fájlt, amelynek a nyomon követett fájlokat tartalmazó bejegyzése lesz. A .A gitattributes fájl ugyanazt a jelölést használja, mint a .gitignore fájl. Itt található a tartalom .gitattributes néz ki:

$ cat .gitattributes
*.jpeg szűrő = lfs diff = lfs egyesítés = lfs -text

A következő paranccsal megtalálja a nyomon követett fájlokat is:

$ git lfs pálya
A követett minták felsorolása
*.jpeg (.gitattributes)

Ha le akarja állítani a fájl nyomon követését, használhatja a következő parancsot:

$ git lfs untrack "*.jpeg "
Követés visszavonása "*.jpeg "

Az általános Git műveletekhez nem kell aggódnia az LFS miatt. Automatikusan gondoskodik az összes háttérfeladatról. Miután beállította a Git LFS-t, úgy dolgozhat a táron, mint bármely más projekt.


A további vizsgálat

Haladóbb témákért keresse meg a következő forrásokat:

  • Git LFS adattár mozgatása a gazdagépek között
  • Helyi Git LFS fájlok törlése
  • Távoli Git LFS fájlok eltávolítása a szerverről
  • Git LFS webhely
  • Git LFS dokumentáció

Referenciák:

  • git-lfs.github.com: GitHub repo
  • github.com / git-lfs / git-lfs / tree / master / docs: GitHub dokumentáció a Git LFS-hez
  • atlassian.com / git / tutorials / git-lfs: Atlassian Tutorials
  • Youtube.com: Mi a Git LFS
  • Youtube.com: Hatalmas fájlok nyomon követése Git LFS segítségével Tim Pettersen, Atlassian
  • Youtube.com: Hatalmas fájlok kezelése a megfelelő tárhelyen a Git LFS, a YouTube segítségével
  • Youtube.com: Git Large File Storage - Hogyan kell dolgozni a nagy fájlokkal, YouTube
  • askubuntu.com / questions / 799341: git-lfs-on-ubuntu-16-04 telepítése
  • github.com / git-lfs / git-lfs / blob / master / TELEPÍTÉS.md: Telepítési útmutató
AppyMouse képernyős Trackpad és egérmutató a Windows táblagépekhez
A táblagép-felhasználók gyakran hiányolják az egérmutatót, különösen akkor, ha szokták használni a laptopokat. Az érintőképernyős okostelefonok és táb...
Az egér középső gombja nem működik a Windows 10 rendszerben
A középső egérgomb segít átgörgetni a hosszú weboldalakat és a sok adatot tartalmazó képernyőket. Ha ez leáll, akkor a billentyűzet segítségével görge...
Hogyan lehet megváltoztatni a bal és jobb egérgombokat a Windows 10 PC-n
Elég általános, hogy az összes számítógépes egéreszközt ergonómikusan a jobbkezes felhasználók számára tervezték. De vannak olyan egéreszközök, amelye...