Гит

Гит ЛФС

Гит ЛФС
Гит је постао де фацто систем контроле верзија за програмере широм света. Овај дистрибуирани систем контроле верзија отвореног кода је бржи од својих конкурената. Једноставан је за употребу за гранање и спајање кода. Међутим, има проблема са перформансама великих бинарних датотека. Гит Ларге Филе Стораге (ЛФС) је развијен за решавање овог проблема.

Велики проблем са датотекама у Гиту

Традиционално, одређене компаније и институције клониле су се Гита због неефикасности у руковању великим бинарним датотекама. Програмери видео игара и медијске компаније морају да се баве сложеним текстурама, видео записима у целости и висококвалитетним аудио датотекама. Истраживачки институти морају да прате велике скупове података који могу бити гигабајти или терабајти. Гит има потешкоћа у одржавању ових великих датотека.

Да бисмо разумели проблем, морамо погледати како Гит води евиденцију о датотекама. Кад год постоји урезивање, Гит креира чвор објекта са показивачем на свог родитеља или више родитеља. Гит модел података познат је као усмерени ациклични граф (ДАГ). ДАГ модел осигурава да однос родитеља и детета никада не може створити било какве циклусе.

Можемо прегледати унутрашње деловање ДАГ модела. Ево примера три урезивања у спремишту:

$ гит лог --онелине
2беб263 Уређивање Ц: додата је слика1.јпег
866178е Уређивање Б: додај б.ткт
д48дд8б Уређивање А: додајте а.ткт

У урезивање А и Б додали смо текстуалну датотеку а.ткт и б.ткт. Затим смо у Цомм Ц додали датотеку слике која се зове имаге1.јпег. ДАГ можемо визуализовати на следећи начин:

Обвежи Ц Објави Б Објави А
2беб263 -> 866178е -> д48дд8б

Ако прегледамо последњу урезивање следећом наредбом:

$ гит мачка-датотека -п 2беб263
дрво 7цц17ба5б041фб227б9аб5534д81бд836183а4е3
надређена 866178е37дф64д9ф19фа77ц00д5ба9д3д4фц68ф5
аутор Зак Х 1513259427 -0800
починитељ Зак Х 1513259427 -0800
Обрезивање Ц: додата слика1.јпег

Видимо да урезивање Ц (2беб263) има надређивање Б (866178е) као родитеља. Сада ако прегледамо објект стабла урезивања Ц (7цц17ба), можемо видети блобс (бинарне велике објекте):

$ гит мачка-датотека -п 7цц17ба
100644 блоб е69де29бб2д1д6434б8б29ае775ад8ц2е48ц5391 а.ткт
100644 блоб е69де29бб2д1д6434б8б29ае775ад8ц2е48ц5391 б.ткт
100644 блоб а44а66ф9е06а8фаф324д3фф3е11ц9фа6966бфб56 имаге1.јпег

Можемо проверити величину блоба слике:

$ гит мачка-датотека а44а66ф9е
871680

Гит прати промене у овој структури стабла. Направимо модификацију слике1.јпег и проверите историју:

$ гит лог --онелине
2е257дб Уређивање Д: измењена слика1.јпег
2беб263 Уређивање Ц: додата је слика1.јпег
866178е Уређивање Б: додај б.ткт
д48дд8б Уређивање А: додајте а.ткт

Ако проверимо објекат Д урезивања (2е257дб):

$ гит мачка-датотека -п 2е257дб
стабло 2405фад67610ацф0ф57б87аф36ф535ц1ф4ф9ед0д
родитељ 2беб263523725е1е8ф9д96083140а4а5цд30б651
аутор Зак Х 1513272250 -0800
починитељ Зак Х 1513272250 -0800
Уређивање Д: измењена слика1.јпег

А дрво (2405фад) у њему:

$ гит мачка-датотека -п 2405фад
100644 блоб е69де29бб2д1д6434б8б29ае775ад8ц2е48ц5391 а.ткт
100644 блоб е69де29бб2д1д6434б8б29ае775ад8ц2е48ц5391 б.ткт
100644 блоб цб4а0б67280а92412а81ц60дф36а15150е713095 имаге1.јпег

Приметите да је СХА-1 хеш за слику1.јпег се променио. То значи да је креирао нови блоб за имаге1.јпег. Можемо проверити величину нове мрље:

$ гит цат-филе -с цб4а0б6
1063696

Ево начина за визуелизацију горње ДАГ структуре:

Обвези Д Објави Ц Објави Б Објави А
|. | |. | |. | |. |
2е257дб -> 2беб263 -> 866178е -> д48дд8б
|. | |. | |. | |. |
Трее4 Трее3 Трее2 Трее1
|. | |. | |. | |. |
Блобс Блобс Блобс Блобс

Сваки објект урезивања одржава своје стабло. Блобс се одржавају унутар тог дрвета. Гит оптимизује простор осигуравајући да само чува разлике и користи компресију за складиштење. Али за промене бинарних датотека, Гит мора да складишти целе датотеке у блобс-ове јер је тешко утврдити разлике. Такође, слике, видео и аудио датотеке су већ компримоване. Као резултат, за сваку инстанцу модификоване бинарне датотеке стабло завршава великим блобом.

Замислимо пример где вршимо више промена у датотеци слике од 100 МБ.

Зарежи Ц -> Завези Б -> Зарежи А
|. | |. | |. |
Трее3 Трее2 Трее1
|. | |. | |. |
Блоб3 Блоб2 Блоб1
300 МБ 200 МБ 100 МБ

Сваки пут када променимо датотеку, Гит мора да направи блоб од 100 МБ. Дакле, само након 3 урезивања, Гит спремиште је 300 МБ. Можете видети да величина Гит спремишта може брзо да се разнесе. Будући да је Гит дистрибуирана контрола верзија, преузет ћете цело спремиште на своју локалну инстанцу и пуно радити са гранама. Тако велике мрље постају уско грло перформанси.

Гит ЛФС решава проблем заменом блобова лаганим датотекама показивача (ПФ) и стварањем механизма за складиштење блобова на другом месту.

Зарежи Ц -> Завези Б -> Зарежи А
|. | |. | |. |
Трее3 Трее2 Трее1
|. | |. | |. |
ПФ3 ПФ2 ПФ1

Локално Гит складишти блобс у Гит ЛФС кеш меморији, а даљински ће их чувати у Гит ЛФС продавници на ГитХуб или БитБуцкет.

ПФ1 -> Блоб1
ПФ2 -> Блоб2
ПФ3 -> Блоб3

Сада када имате посла са Гит спремиштем, лагане ПФ датотеке ће се користити за рутинске операције. Блобс ће се дохватити само када је то потребно. На пример, ако наручите Цомм Ц, тада ће Гит ЛФС потражити показивач ПФ3 и преузети Блоб3. Тако ће радно спремиште бити витко, а перформансе ће бити боље. Не морате бринути о датотекама показивача. Гит ЛФС ће управљати њима иза кулиса.

Инсталирање и покретање Гит ЛФС-а

Већ је раније било покушаја да се реши проблем велике датотеке Гит. Али Гит ЛФС је успео јер је једноставан за употребу. Само треба да инсталирате ЛФС и кажете му које датотеке треба пратити.

Можете инсталирати Гит ЛФС користећи следеће наредбе:

$ судо апт-гет инсталирајте софтвер-својства-заједничка
$ цурл -с хттпс: // пацкагецлоуд.ио / инсталл / репоситориес / гитхуб / гит-лфс / сцрипт.деб.сх | судо басх
$ судо апт-гет инсталл гит-лфс
$ гит лфс инсталација

Након што инсталирате Гит ЛФС, можете пратити датотеке које желите:

$ гит лфс трацк "*.јпег "
Праћење "*.јпег "

Излаз вам показује да Гит ЛФС прати ЈПЕГ датотеке. Када започнете праћење помоћу ЛФС-а, наћи ћете .гитаттрибутес датотека која ће имати унос који приказује праћене датотеке. Тхе .гитаттрибутес датотека користи исти запис као .гитигноре датотека. Ево како је садржај .гитаттрибутес изгледа:

$ мачка .гитаттрибутес
*.јпег филтер = лфс дифф = лфс мерге = лфс -тект

Такође можете пронаћи које се датотеке прате помоћу следеће наредбе:

$ гит лфс трацк
Навођење праћених образаца
*.јпег (.гитаттрибутес)

Ако желите зауставити праћење датотеке, можете користити следећу команду:

$ гит лфс унтрацк "*.јпег "
Отказивање "*.јпег "

За опште Гит операције, не морате да бринете о ЛФС-у. Аутоматски ће се побринути за све позадинске задатке. Једном када сте поставили Гит ЛФС, можете радити на спремишту као и сваки други пројекат.


Даље истраживање

Напредније теме потражите у следећим ресурсима:

  • Премештање Гит ЛФС спремишта између хостова
  • Брисање локалних Гит ЛФС датотека
  • Уклањање удаљених Гит ЛФС датотека са сервера
  • Веб локација Гит ЛФС
  • Гит ЛФС документација

Референце:

  • гит-лфс.гитхуб.цом: ГитХуб репо
  • гитхуб.цом / гит-лфс / гит-лфс / трее / мастер / доцс: ГитХуб документација за Гит ЛФС
  • атласки.цом / гит / туториалс / гит-лфс: Атлассиан туторијали
  • ЈуТјуб.цом: Шта је Гит ЛФС
  • ЈуТјуб.цом: Праћење огромних датотека са Гит ЛФС, Тим Петтерсен, Атлассиан
  • ЈуТјуб.цом: Управљање огромним датотекама у правом складишту помоћу Гит ЛФС, ИоуТубе
  • ЈуТјуб.цом: Гит Стораге за велике датотеке - Како радити са великим датотекама, ИоуТубе
  • аскубунту.цом / куестионс / 799341: како-инсталирати-гит-лфс-он-убунту-16-04
  • гитхуб.цом / гит-лфс / гит-лфс / блоб / мастер / ИНСТАЛИРАЊЕ.мд: Водич за инсталацију
Водич за битку за Веснотх
Битка за Веснотх је једна од најпопуларнијих стратешких игара отвореног кода које тренутно можете играти. Не само да је ова игра у развоју већ јако ду...
0 А.Д. Приручник
Од многих стратешких игара тамо, 0 А.Д. успева да се истакне као свеобухватан наслов и врло дубока, тактичка игра упркос томе што је отворен извор. Ра...
Водич за Унити3Д
Увод у Унити 3Д Унити 3Д је моћан мотор за развој игара. То је унакрсна платформа која вам омогућава да креирате игре за мобилне уређаје, веб, стоне р...