Git

Git LFS

Git LFS
„Git“ tapo de facto versijų valdymo sistema programinės įrangos kūrėjams visame pasaulyje. Ši atvirojo kodo paskirstytoji versijų valdymo sistema yra greitesnė nei konkurentų. Tai lengva naudoti šakojant ir sujungiant kodą. Tačiau ji turi didelių dvejetainių failų našumo problemą. Šiai problemai spręsti buvo sukurta „Git Large File Storage“ (LFS).

Didelė failo problema „Git“

Tradiciškai tam tikros įmonės ir įstaigos laikėsi atokiau nuo „Git“ dėl neefektyvaus didelių dvejetainių failų tvarkymo. Vaizdo žaidimų kūrėjai ir žiniasklaidos įmonės turi susidurti su sudėtingomis tekstūromis, viso judesio vaizdo įrašais ir aukštos kokybės garso failais. Tyrimų institutai turi sekti didelius duomenų rinkinius, kurie gali būti gigabaitai arba terabaitai. „Git“ sunku išlaikyti šiuos didelius failus.

Norėdami suprasti problemą, turime pasidomėti, kaip „Git“ seka failus. Kai yra įsipareigojimas, „Git“ sukuria objekto mazgą su žymekliu savo tėvams ar keliems tėvams. „Git“ duomenų modelis yra žinomas kaip nukreiptasis aciklinis grafikas (DAG). DAG modelis užtikrina, kad tėvų ir vaikų santykiai niekada negali sudaryti jokių ciklų.

Mes galime apžiūrėti vidinį DAG modelio veikimą. Čia pateikiamas trijų įvykių saugykloje pavyzdys:

$ git žurnalas - tiesioginis
2beb263 Įsipareigokite C: pridėtas vaizdas1.JPEG
866178e Įsipareigokite B: pridėkite b.txt
d48dd8b Įsipareigokite A: pridėkite a.txt

Įsipareigodami A ir B, pridėjome tekstinį failą a.txt ir b.txt. Tada į „Commit C“ pridėjome vaizdo failą, vadinamą image1.JPEG. Mes galime vizualizuoti DAG taip:

Įvykdyti C Įpareigoti B Įvykdyti A
2beb263 -> 866178e -> d48dd8b

Jei mes patikrinsime paskutinį įsipareigojimą naudodami šią komandą:

$ git katės byla -p 2beb263
medis 7cc17ba5b041fb227b9ab5534d81bd836183a4e3
tėvas 866178e37df64d9f19fa77c00d5ba9d3d4fc68f5
autorius Zakas H 1513259427 -0800
vykdytojas Zakas H 1513259427 -0800
Įsipareigokite C: pridėtas vaizdas1.JPEG

Matome, kad „Commit C“ (2beb263) yra „Commit B“ (866178e). Dabar, jei apžiūrime „Commit C“ (7cc17ba) medžio objektą, galime pamatyti burbuoles (dvejetainius didelius objektus):

$ git katės failas -p 7cc17ba
100644 „blob“ e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 „blob“ e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 „BLOB“ a44a66f9e06a8faf324d3ff3e11c9fa6966bfb56 image1.JPEG

Galime patikrinti paveikslėlio dydžio dydį:

$ git katės failas -s a44a66f9e
871680

Gitas seka šios medžio struktūros pokyčius. Atlikime paveikslėlio modifikaciją1.JPEG ir patikrinkite istoriją:

$ git žurnalas - tiesioginis
2e257db Įsipareigokite D: pakeistas vaizdas1.JPEG
2beb263 Įsipareigokite C: pridėtas vaizdas1.JPEG
866178e Įsipareigokite B: pridėkite b.txt
d48dd8b Įsipareigokite A: pridėkite a.txt

Jei patikrinsime „Commit D“ objektą (2e257db):

$ git katės failas -p 2e257db
medis 2405fad67610acf0f57b87af36f535c1f4f9ed0d
2beb263523725e1e8f9d96083140a4a5cd30b651
autorius Zakas H 1513272250 -0800
vykdytojas Zakas H 1513272250 -0800
Įsipareigoti D: pakeistas vaizdas1.JPEG

Medis (2405fad) jo viduje:

$ git katės failas -p 2405fad
100644 „blob“ e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 „blob“ e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 „BLOB“ cb4a0b67280a92412a81c60df36a15150e713095 image1.JPEG

Atkreipkite dėmesį, kad SHA-1 maiša „image1“.jpeg pasikeitė. Tai reiškia, kad jis sukūrė naują „image1“ dėmę.JPEG. Mes galime patikrinti naujojo dėmės dydį:

$ git katės failas -s cb4a0b6
1063696

Štai būdas pavaizduoti aukščiau pateiktą DAG struktūrą:

Įsipareigoti D Įsipareigoti C Įvykdyti B Įvykdyti A
| | | |
2e257db -> 2beb263 -> 866178e -> d48dd8b
| | | |
Medis4 Medis3 Medis2 Medis1
| | | |
Blobs Blobs Blobs Blobs

Kiekvienas įsipareigojimo objektas prižiūri savo medį. Blokai laikomi to medžio viduje. „Git“ optimizuoja erdvę įsitikindama, kad joje saugomi tik skirtumai, o sandėliavimui naudojamas glaudinimas. Bet norint pakeisti dvejetainius failus, „Git“ turi išsaugoti visus failus blobuose, nes sunku nustatyti skirtumus. Be to, vaizdo, vaizdo ir garso failai jau yra suglaudinti. Todėl kiekvienam modifikuoto dvejetainio failo egzemplioriui medis baigiasi dideliu dėmeniu.

Pagalvokime pavyzdį, kai kelis kartus keičiame 100 MB vaizdo failą.

Įvykdyti C -> Įpareigoti B -> Įvykdyti A
| | |
Medis3 Medis2 Medis1
| | |
Blob3 Blob2 Blob1
300 MB 200 MB 100 MB

Kiekvieną kartą, kai keičiame failą, „Git“ turi sukurti 100 MB dydžio BLOB. Taigi tik po 3 įsipareigojimų „Git“ saugykla yra 300 MB. Galite pastebėti, kad „Git“ saugyklos dydis gali greitai susprogdinti. Kadangi „Git“ yra paskirstytas versijų valdymas, jūs ketinate atsisiųsti visą saugyklą į savo vietinę instanciją ir daug dirbti su filialais. Taigi didelės blobos tampa našumu.

„Git LFS“ išsprendžia problemą pakeisdamas blobus lengvais žymeklio failais (PF) ir sukurdamas mechanizmą, skirtą blobams laikyti kitur.

Įvykdyti C -> Įpareigoti B -> Įvykdyti A
| | |
Medis3 Medis2 Medis1
| | |
PF3 PF2 PF1

Lokaliai „Git“ saugo burbuliukus „Git LFS“ talpykloje ir nuotoliniu būdu juos laikys „Git LFS“ parduotuvėje „GitHub“ arba „BitBucket“.

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

Dabar, kai turite reikalų su „Git“ saugykla, lengvi PF failai bus naudojami įprastoms operacijoms. Burbulai bus paimti tik tada, kai tai bus būtina. Pvz., Jei patikrinsite „Commit C“, „Git LFS“ ieškos PF3 žymeklio ir atsisiųs „Blob3“. Taigi darbo saugykla bus plonesnė, o našumas geresnis. Jums nereikia jaudintis dėl žymeklio failų. „Git LFS“ juos valdys užkulisiuose.

Diegimas ir paleidimas Git LFS

Anksčiau buvo bandoma išspręsti didelių „Git“ failų problemą. Bet „Git LFS“ pavyko, nes jį lengva naudoti. Jums tereikia įdiegti LFS ir pasakyti, kuriuos failus stebėti.

Galite įdiegti „Git LFS“ naudodami šias komandas:

$ 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
$ git lfs įdiegti

Įdiegę „Git LFS“, galite stebėti norimus failus:

$ git lfs takelis "*.JPEG "
Stebėjimas “*.JPEG "

Išvestis rodo, kad „Git LFS“ stebi JPEG failus. Pradėję stebėti su LFS, rasite .„gitattributes“ failą, kuriame bus įrašas, kuriame rodomi sekami failai. The .faile gitattributes naudojamas tas pats žymėjimas kaip .gitignore failas. Štai kaip .„gitattributes“ išvaizda:

$ katė .gitattributes
*.jpeg filtras = lfs diff = lfs sujungti = lfs -tekstas

Taip pat galite rasti, kurie failai yra stebimi, naudodami šią komandą:

$ git lfs trasa
Stebimų modelių sąrašas
*.JPEG (.gitattributes)

Jei norite sustabdyti failo stebėjimą, galite naudoti šią komandą:

$ git lfs untrack "*.JPEG "
Atsekimas „*.JPEG "

Atliekant bendras „Git“ operacijas, jums nereikia jaudintis dėl LFS. Jis automatiškai pasirūpins visomis programinės įrangos užduotimis. Sukūrę „Git LFS“, galėsite dirbti saugykloje kaip ir bet kuris kitas projektas.


Tolesnis tyrimas

Jei reikia daugiau pažangių temų, ieškokite šių šaltinių:

  • „Git LFS“ saugyklos perkėlimas tarp kompiuterių
  • Ištrinami vietiniai „Git LFS“ failai
  • Nuotolinių „Git LFS“ failų pašalinimas iš serverio
  • „Git LFS“ svetainė
  • „Git LFS“ dokumentacija

Nuorodos:

  • git-lfs.github.com: „GitHub“ atpirkimas
  • github.com / git-lfs / git-lfs / tree / master / docs: „GitHub“ dokumentacija, skirta „Git LFS“
  • atlassian.com / git / tutorials / git-lfs: „Atlassian Tutorials“
  • „YouTube“.com: Kas yra „Git LFS“
  • „YouTube“.com: Milžiniškų failų sekimas naudojant „Git LFS“, Tim Pettersen, Atlassianas
  • „YouTube“.lt: milžiniškų failų tvarkymas tinkamoje saugykloje naudojant „Git LFS“, „YouTube“
  • „YouTube“.lt: „Git Large File Storage“ - kaip dirbti su dideliais failais, „YouTube“
  • askubuntu.„com / questions / 799341: how-to-install-git-lfs-on-ubuntu-16-04“
  • github.com / git-lfs / git-lfs / blob / master / INSTALLING.md: Diegimo vadovas
Kaip naudoti „GameConqueror Cheat Engine“ sistemoje „Linux“
Straipsnyje pateikiamas „GameConqueror“ apgaulės variklio naudojimo „Linux“ vadove. Daugelis žaidėjų, žaidžiančių sistemoje „Windows“, dažnai naudoja ...
Geriausi „Linux“ žaidimų konsolių emuliatoriai
Šiame straipsnyje bus išvardyta populiari žaidimų konsolių emuliavimo programinė įranga, skirta „Linux“. „Emuliacija“ yra programinės įrangos suderina...
Geriausi „Linux“ žaidimų distristai 2021 m
„Linux“ operacinė sistema nuėjo ilgą kelią nuo originalios, paprastos, serverio išvaizdos. Ši OS pastaraisiais metais nepaprastai patobulėjo ir dabar ...