Git

Git LFS

Git LFS
Gitist on saanud tarkvaraarendajate de facto versioonikontrollisüsteem kogu maailmas. See avatud lähtekoodiga hajutatud versioonide juhtimissüsteem on konkurentidest kiirem. Seda on koodi hargnemisel ja ühendamisel hõlpsasti kasutada. Suurte binaarfailidega on tal aga jõudlusprobleem. Selle probleemi lahendamiseks töötati välja Git Large File Storage (LFS).

Suur failiprobleem Gitis

Traditsiooniliselt on teatud ettevõtted ja asutused Gitist eemale hoidnud suurte binaarsete failide töötlemise ebaefektiivsuse tõttu. Videomängude arendajad ja meediaettevõtted peavad tegelema keerukate tekstuuride, täisliigutusega videote ja kvaliteetsete helifailidega. Uurimisinstituudid peavad jälgima suuri andmekogumeid, mis võivad olla gigabaiti või terabaiti. Gitil on raskusi nende suurte failide hooldamisega.

Probleemi mõistmiseks peame heitma pilgu sellele, kuidas Git faile jälgib. Alati, kui tegemist on kohustusega, loob Git oma vanemale või mitmele vanemale osutava kursoriga objekti sõlme. Giti andmemudelit nimetatakse suunatud atsükliliseks graafiks (DAG). DAG-mudel tagab, et vanema ja lapse suhe ei saa kunagi moodustada tsükleid.

Saame kontrollida mudeli DAG sisemist tööd. Siin on näide kolmest toimingust hoidlas:

$ git log - oneline
2beb263 Commit C: lisatud pilt1.jpeg
866178e Kohustage B: lisage b.txt
d48dd8b Kohustage A: lisage a.txt

Kohustustes A ja B lisasime tekstifaili a.txt ja b.txt. Seejärel lisasime Commit C-s pildifaili nimega image1.jpeg. DAG-i saame visualiseerida järgmiselt:

Kohustus C Kohustus B Kohustus A
2beb263 -> 866178e -> d48dd8b

Kui kontrollime viimast kohustust järgmise käsuga:

$ git kassitoimik -p 2beb263
puu 7cc17ba5b041fb227b9ab5534d81bd836183a4e3
vanem 866178e37df64d9f19fa77c00d5ba9d3d4fc68f5
autor Zak H 1513259427 -0800
koostaja Zak H 1513259427 -0800
Tehke C: lisage pilt1.jpeg

Näeme, et kohustusel C (2beb263) on lapsevanemana kohustus B (866178e). Nüüd, kui kontrollime kohustuse C puuobjekti (7cc17ba), näeme plekke (binaarsed suured objektid):

$ git kassitoimik -p 7cc17ba
100644 kämp e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 kämp e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 plekk a44a66f9e06a8faf324d3ff3e11c9fa6966bfb56 image1.jpeg

Saame kontrollida pildi pleki suurust:

$ git kassitoimik -s a44a66f9e
871680

Git jälgib selle puu struktuuri muutusi. Teeme pildil1 modifikatsiooni.JPEG ja kontrollige ajalugu:

$ git log - oneline
2e257db Commit D: muudetud pilt1.jpeg
2beb263 Commit C: lisatud pilt1.jpeg
866178e Kohustage B: lisage b.txt
d48dd8b Kohustage A: lisage a.txt

Kui kontrollime objekti Commit D (2e257db):

$ git kassifail -p 2e257db
puu 2405fad67610acf0f57b87af36f535c1f4f9ed0d
vanem 2beb263523725e1e8f9d96083140a4a5cd30b651
autor Zak H 1513272250 -0800
koostaja Zak H 1513272250 -0800
Tehke D: muudetud pilt1.jpeg

Ja selle sees olev puu (2405fad):

$ git kassifail -p 2405fad
100644 kämp e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 kämp e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 plekk cb4a0b67280a92412a81c60df36a15150e713095 image1.jpeg

Pange tähele, et pildi1 räsi SHA-1.JPEG on muutunud. See tähendab, et see on loonud pildile1 uue pleki.jpeg. Saame kontrollida uue pleki suurust:

$ git kassifail -s cb4a0b6
1063696

Siin on viis ülaltoodud DAG-i struktuuri visualiseerimiseks:

Pühendu D Pühendu C Pühendu B Pühendu A
| | | |
2e257db -> 2beb263 -> 866178e -> d48dd8b
| | | |
Puu4 Puu3 Puu2 Puu1
| | | |
Plekid plekid plekid plekid

Iga sidumisobjekt säilitab oma puu. Selle puu sees hoitakse plekke. Git optimeerib ruumi, veendudes, et see salvestaks ainult erinevused ja kasutab salvestamiseks tihendamist. Kuid binaarfailide muutmiseks peab Git terveid faile plekidesse salvestama, sest erinevusi on raske kindlaks teha. Samuti on pildi-, video- ja helifailid juba tihendatud. Selle tulemusena jõuab puu modifitseeritud binaarfaili iga eksemplari suurde plekini.

Mõelgem ühe näite peale, kus teeme 100 MB pildifailis mitu muudatust.

Pühendu C -> Pane B -> Pane A
| | |
Puu3 Puu2 Puu1
| | |
Plekk3 plekk2 plekk1
300 MB 200 MB 100 MB

Iga kord, kui muudame faili, peab Git looma 100 MB suuruse pleki. Nii et alles pärast 3 toimingut on Giti hoidla 300 MB. Näete, et Giti hoidla suurus võib kiiresti õhku paisata. Kuna Git on hajutatud versioonihaldus, laadite kogu hoidla alla oma kohalikule eksemplarile ja töötate palju harudega. Nii et suurtest plekidest saab jõudluse kitsaskoht.

Git LFS lahendab probleemi, asendades plekid kergete osutifailidega (PF) ja luues mehhanismi plekide mujal hoidmiseks.

Pühendu C -> Pane B -> Pane A
| | |
Puu3 Puu2 Puu1
| | |
PF3 PF2 PF1

Kohalikult hoiab Git plekid Git LFS-i vahemälus ja eemalt salvestab need Git LFS-i poes GitHubis või BitBucketis.

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

Kui tegelete Giti hoidlaga, kasutatakse tavapärastes toimingutes kergeid PF-faile. Plekid leitakse ainult vajaduse korral. Näiteks kui maksate välja Commit C, otsib Git LFS PF3 kursorit ja laadib alla Blob3. Nii et töötav hoidla on lahjem ja jõudlus parem. Te ei pea muretsema kursorifailide pärast. Git LFS haldab neid kulisside taga.

Git LFS-i installimine ja käitamine

Git suurte failide probleemi on juba varem püütud lahendada. Kuid Git LFS on õnnestunud, kuna seda on lihtne kasutada. Peate lihtsalt installima LFS-i ja ütlema, milliseid faile jälgida.

Git LFS-i saate installida järgmiste käskude abil:

$ sudo apt-get install tarkvara-omadused-ühine
$ curl -s https: // packagecloud.io / install / repositories / github / git-lfs / script.deb.sh | sudo bash
$ sudo apt-get install git-lfs
$ git lfs installimine

Kui olete Git LFS-i installinud, saate jälgida soovitud faile:

$ git lfs rada "*.JPEG "
Jälgimine "*.JPEG "

Väljund näitab teile, et Git LFS jälgib JPEG-faile. Kui hakkate LFS-iga jälgima, leiate a .gitattributes fail, millel on jälgitud faile näitav kirje. The .gitattributes fail kasutab sama tähistust nagu .gitignore fail. Siin on, kuidas sisu .gitattributes näeb välja:

$ kass .gitattributes
*.jpeg filter = lfs diff = lfs liitma = lfs -tekst

Järgmise käsu abil leiate ka jälgitavaid faile:

$ git lfs rada
Jälgitud mustrite loetelu
*.JPEG (.gitattributes)

Kui soovite faili jälgimise peatada, võite kasutada järgmist käsku:

$ git lfs untrack "*.JPEG "
Jälgimise eemaldamine "*.JPEG "

Git-operatsioonide jaoks ei pea te LFS-i pärast muretsema. See hoolitseb kõigi taustaprogrammi ülesannete eest automaatselt. Kui olete Git LFS-i seadistanud, saate hoidlas töötada nagu iga teine ​​projekt.


Edasine uuring

Täpsemate teemade leidmiseks uurige järgmisi ressursse:

  • Giti LFS-i hoidla teisaldamine hostide vahel
  • Local Git LFS-failide kustutamine
  • Git LFS-i kaugfailide eemaldamine serverist
  • Git LFS veebisait
  • Git LFS dokumentatsioon

Viited:

  • git-lfs.github.com: GitHubi repo
  • github.com / git-lfs / git-lfs / tree / master / docs: GitHubi dokumentatsioon Git LFS-i jaoks
  • atlasslane.com / git / tutorials / git-lfs: Atlassian Tutorials
  • Youtube.com: Mis on Git LFS
  • Youtube.com: tohutute failide jälgimine Git LFS-iga, autor Tim Pettersen, Atlassian
  • Youtube.com: tohutute failide haldamine õiges salvestusruumis Git LFS, YouTube abil
  • Youtube.com: Git Large File Storage - kuidas töötada suurte failidega, YouTube
  • askubuntu.com / questions / 799341: kuidas-git-lfs-on-ubuntu-16-04 installida
  • github.com / git-lfs / git-lfs / blob / master / PAIGALDAMINE.md: Paigaldusjuhend
Lahing Wesnothi õpetuse eest
Battle for Wesnoth on üks populaarsemaid avatud lähtekoodiga strateegiamänge, mida saate praegu mängida. See mäng pole mitte ainult olnud väga pikka a...
0 A.D. Õpetus
Paljudest strateegiamängudest on 0 A.D. suudab silma paista põhjaliku tiitli ja väga sügava taktikalise mänguna, hoolimata sellest, et see on avatud l...
Unity3D õpetus
Sissejuhatus Unity 3D-sse Unity 3D on võimas mängude arendamise mootor. See on platvormidevaheline, mis võimaldab teil luua mänge mobiilseadmetele, ve...