Git

Git LFS

Git LFS
Git ir kļuvis par de facto versiju kontroles sistēmu programmatūras izstrādātājiem visā pasaulē. Šī atvērtā koda izplatītā versiju vadības sistēma ir ātrāka nekā tās konkurentiem. To ir viegli izmantot, lai sazarotu un apvienotu kodu. Tomēr tam ir veiktspējas problēma ar lieliem bināriem failiem. Lai risinātu šo problēmu, tika izstrādāta Git Large File Storage (LFS).

Liela faila problēma Git

Tradicionāli daži uzņēmumi un iestādes ir palikuši prom no Git lielo bināro failu apstrādes neefektivitātes dēļ. Videospēļu izstrādātājiem un mediju uzņēmumiem ir jānodarbojas ar sarežģītām tekstūrām, pilnas kustības video un augstas kvalitātes audio failiem. Pētniecības institūtiem ir jāseko lielām datu kopām, kas var būt gigabaiti vai terabaiti. Gitam ir grūtības uzturēt šos lielos failus.

Lai saprastu problēmu, mums jāaplūko, kā Git seko failiem. Ikreiz, kad ir saistības, Gits izveido objekta mezglu ar rādītāju vecākiem vai vairākiem vecākiem. Git datu modelis ir pazīstams kā virzītais acikliskais grafiks (DAG). DAG modelis nodrošina, ka vecāku un bērnu attiecības nekad nevar veidot ciklus.

Mēs varam pārbaudīt DAG modeļa iekšējo darbību. Šeit ir trīs glabātavā veikto darbību piemērs:

$ git log - tiešsaistē
2beb263 Apņemties C: pievienots attēls1.JPEG
866178e Saņemt B: pievienot b.txt
d48dd8b Apņemties A: pievienojiet a.txt

Saistībās A un B mēs pievienojām teksta failu a.txt un b.txt. Pēc tam programmā Commit C mēs pievienojām attēla failu ar nosaukumu image1.JPEG. Mēs varam vizualizēt DAG šādi:

Saņemt C Izpildīt B Saistīt A
2beb263 -> 866178e -> d48dd8b

Ja mēs pārbaudīsim pēdējo saistību ar šādu komandu:

$ git kaķu fails -p 2beb263
koks 7cc17ba5b041fb227b9ab5534d81bd836183a4e3
vecāks 866178e37df64d9f19fa77c00d5ba9d3d4fc68f5
autors Zaks H 1513259427 -0800
izpildītājs Zaks H 1513259427 -0800
Apņemties C: pievienots attēls1.JPEG

Mēs varam redzēt, ka saistībai C (2beb263) ir saistības B (866178e) kā vecākam. Tagad, ja mēs pārbaudām Commit C (7cc17ba) koka objektu, mēs varam redzēt lāses (lielus binārus objektus):

$ git kaķu fails -p 7cc17ba
100644 lāse e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 lāse e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 lāse a44a66f9e06a8faf324d3ff3e11c9fa6966bfb56 image1.JPEG

Mēs varam pārbaudīt attēla lāse izmēru:

$ git kaķu fails -s a44a66f9e
871680

Gits seko līdzi izmaiņām šajā koka struktūrā. Veiksim attēla modifikāciju1.JPEG un pārbaudiet vēsturi:

$ git log - tiešsaistē
2e257db Apņemties D: modificēts attēls1.JPEG
2beb263 Apņemties C: pievienots attēls1.JPEG
866178e Saņemt B: pievienot b.txt
d48dd8b Apņemties A: pievienojiet a.txt

Ja mēs pārbaudām objektu Commit D (2e257db):

$ git kaķu fails -p 2e257db
koks 2405fad67610acf0f57b87af36f535c1f4f9ed0d
vecāks 2beb263523725e1e8f9d96083140a4a5cd30b651
autors Zaks H 1513272250 -0800
izpildītājs Zaks H 1513272250 -0800
Apņemties D: modificēts attēls.JPEG

Un koks (2405fad) tā iekšpusē:

$ git kaķu fails -p 2405fad
100644 lāse e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 a.txt
100644 lāse e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 b.txt
100644 lāse cb4a0b67280a92412a81c60df36a15150e713095 image1.JPEG

Ievērojiet, ka SH1-hash attēlam1.jpeg ir mainījies. Tas nozīmē, ka tas ir izveidojis jaunu lāpi image1.JPEG. Mēs varam pārbaudīt jaunā lāse izmēru:

$ git kaķu fails -s cb4a0b6
1063696

Šeit ir veids, kā vizualizēt iepriekš minēto DAG struktūru:

Saņemt D Izpildīt C Saistīt B Saistīt A
| | | |
2e257db -> 2beb263 -> 866178e -> d48dd8b
| | | |
Koks4 Koks3 Koks2 Koks1
| | | |
Blobs Blobs Blobs Blobs

Katrs apņemšanās objekts uztur savu koku. Lāpas tiek turētas šī koka iekšpusē. Git optimizē vietu, pārliecinoties, ka tajā tiek uzglabātas tikai atšķirības un uzglabāšanai tiek izmantota saspiešana. Bet, lai veiktu bināro failu izmaiņas, Git ir jāglabā veseli faili burbuļos, jo ir grūti noteikt atšķirības. Arī attēlu, video un audio faili jau ir saspiesti. Rezultātā katram modificēta binārā faila gadījumam koks beidzas ar lielu lāse.

Iedomāsimies piemēru, kur mēs veicam vairākas izmaiņas 100 MB attēla failā.

Apņemties C -> Apņemties B -> Saņemt A
| | |
Koks3 Koks2 Koks1
| | |
Blob3 Blob2 Blob1
300 MB 200 MB 100 MB

Katru reizi, kad mainām failu, Git ir jāizveido 100 MB lāse. Tātad tikai pēc 3 saistībām Git krātuve ir 300 MB. Var redzēt, ka Git krātuves izmērs var ātri uzsprāgt. Tā kā Git ir izplatīta versiju vadība, jūs lejupielādēsit visu krātuvi vietējā instancē un daudz strādāsit ar filiālēm. Tātad lielie lāse kļūst par veiktspējas sašaurinājumu.

Git LFS atrisina problēmu, nomainot plankumus ar viegliem rādītāju failiem (PF) un izveidojot mehānismu, lai blobus uzglabātu citur.

Apņemties C -> Apņemties B -> Apņemties A
| | |
Koks3 Koks2 Koks1
| | |
PF3 PF2 PF1

Lokāli Git glabā blobus Git LFS kešatmiņā un attālināti tos glabās Git LFS veikalā GitHub vai BitBucket.

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

Tagad, kad jūs strādājat ar Git repozitoriju, ikdienas darbībām tiks izmantoti vieglie PF faili. Lāpi tiks izgūti tikai nepieciešamības gadījumā. Piemēram, ja izrakstāties Commit C, tad Git LFS uzmeklēs PF3 rādītāju un lejupielādēs Blob3. Tātad darba krātuve būs mazāka, un sniegums būs labāks. Jums nav jāuztraucas par rādītāja failiem. Git LFS tos pārvaldīs aizkulisēs.

Git LFS instalēšana un palaišana

Iepriekš tika mēģināts atrisināt lielo failu Git lielo problēmu. Bet Git LFS ir izdevies, jo tas ir viegli lietojams. Jums vienkārši jāinstalē LFS un jāpasaka, kurus failus izsekot.

Git LFS var instalēt, izmantojot šādas 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 instalēt

Kad esat instalējis Git LFS, varat izsekot vēlamos failus:

$ git lfs celiņš "*.JPEG "
Izsekošana "*.JPEG "

Rezultāts parāda, ka Git LFS izseko JPEG failus. Sākot izsekošanu ar LFS, jūs atradīsit .gitattributes fails, kurā būs ieraksts, kurā parādīti izsekotie faili. The .failā gitattributes tiek izmantots tāds pats apzīmējums kā .gitignore fails. Lūk, kā .gitattributes izskatās:

$ kaķis .gitattributes
*.jpeg filtrs = lfs diff = lfs sapludināt = lfs -teksts

Izmantojot šo komandu, varat arī atrast, kuri faili tiek izsekoti:

$ git lfs trase
Uzskaitīto modeļu uzskaitīšana
*.JPEG (.gitattributes)

Ja vēlaties pārtraukt faila izsekošanu, varat izmantot šādu komandu:

$ git lfs untrack "*.JPEG "
Notiek izsekošana "*.JPEG "

Vispārējām Git operācijām jums nav jāuztraucas par LFS. Tas automātiski nokārtos visus aizmugures uzdevumus. Kad esat iestatījis Git LFS, jūs varat strādāt ar krātuvi tāpat kā jebkurš cits projekts.


Turpmāka izpēte

Papildu tēmas skatiet šādos resursos:

  • Git LFS repozitorija pārvietošana starp saimniekiem
  • Vietējo Git LFS failu dzēšana
  • Attālu Git LFS failu noņemšana no servera
  • Git LFS vietne
  • Git LFS dokumentācija

Atsauces:

  • git-lfs.github.com: GitHub repo
  • github.com / git-lfs / git-lfs / tree / master / docs: GitHub dokumentācija Git LFS
  • atlassian.com / git / tutorials / git-lfs: Atlassian Tutorials
  • youtube.com: Kas ir Git LFS
  • youtube.com: Milzīgu failu izsekošana ar Git LFS, Tim Pettersen, Atlassian
  • youtube.lv: milzīgu failu pārvaldīšana pareizajā krātuvē, izmantojot Git LFS, YouTube
  • youtube.com: Git lielu failu glabāšana - kā strādāt ar lieliem failiem, YouTube
  • askubuntu.com / questions / 799341: how-to-install-git-lfs-on-ubuntu-16-04
  • github.com / git-lfs / git-lfs / blob / master / INSTALLING.md: Uzstādīšanas rokasgrāmata
Kā parādīt OSD pārklājumu pilnekrāna Linux lietotnēs un spēlēs
Spēlējot pilnekrāna spēles vai lietojot lietotnes bez atrautības pilnekrāna režīmā, jūs varat izslēgt no attiecīgās sistēmas informācijas, kas redzama...
Top 5 spēļu tveršanas kartes
Mēs visi esam redzējuši un mīlējuši straumēšanas spēles pakalpojumā YouTube. PewDiePie, Jakesepticye un Markiplier ir tikai daži no labākajiem spēlētā...
Kā izstrādāt spēli Linux
Pirms desmit gadiem maz Linux lietotāju varētu paredzēt, ka viņu iecienītā operētājsistēma kādu dienu būs populāra spēļu platforma komerciālām videosp...