Git

Git Plytký klon a hĺbka klonu

Git Plytký klon a hĺbka klonu

Pochopenie plytkého klonu Git a hĺbky klonu

Git je systém riadenia distribuovanej verzie. To je jedna z výhod používania Gitu. Ak chcete pracovať lokálne, nemusíte byť závislí od centrálneho servera alebo úložiska. Všetko, čo potrebujete, pokiaľ ide o históriu vašich modulov, máte na dosah ruky. Môže sa však stať problémom, keď pracujete s úložiskami s veľkými binárnymi súbormi alebo úložiskami, ktoré majú dlhú históriu. Najmä ak sa nachádzate v situácii, keď si ho potrebujete stiahnuť vždy čerstvé, napríklad server so zostavením, potom sa veľkosť a časy sťahovania môžu stať problémom.

Riešením problému spoločnosti Git je plytký klon, kde môžete pomocou hĺbky klonu definovať, do akej hĺbky má váš klon ísť. Napríklad ak použijete -depth 1, potom počas klonovania dostane Git iba najnovšiu kópiu príslušných súborov. Môže vám to ušetriť veľa miesta a času.

Git plytký klon a veľkosť

Pozrime sa na populárne úložisko Git pre Django. Ak repo úplne naklonujete, získate nasledovné:

$ git klon https: // github.com / django / django.git
Klonovanie do 'django' ..
remote: Počítanie objektov: 409053, hotovo.
remote: Kompresia objektov: 100% (26/26), hotovo.
remote: Total 409053 (delta 6), reused 8 (delta 1), pack-reused 409026
Príjem predmetov: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, hotovo.
Riešenie delt: 100% (297045/297045), hotovo.
Prebieha kontrola pripojenia ... hotovo.
Odhlásenie súborov: 100% (5860/5860), hotovo.

Ak teraz skontrolujete veľkosť miestnej kópie, je to:

$ du -sh django /
225 M django /

Poďme získať to isté úložisko Django s plytkým klonom:

$ git clone - hĺbka 1 https: // github.com / django / django.git
Klonovanie do 'django' ..
remote: Počítanie objektov: 8091, hotovo.
remote: Kompresia objektov: 100% (4995/4995), hotovo.
remote: Total 8091 (delta 2036), reused 5507 (delta 1833), pack-reused 0
Príjem predmetov: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, hotovo.
Riešenie delt: 100% (2036/2036), hotovo.
Prebieha kontrola pripojenia ... hotovo.
Odhlásenie súborov: 100% (5860/5860), hotovo.

Ak teraz skontrolujete veľkosť miestnej kópie, malo by to byť podstatne menej:

$ du -sh django /
55M django /

Ak váš server pracuje so stovkami produktových radov, môže byť užitočný tento druh úspory miesta na pevnom disku. V prípade herných projektov, kde sú veľké binárne súbory, to môže mať dramatický efekt. Pomáha tiež pri dlhodobých projektoch. Napríklad celé klonovanie Linuxového úložiska z GitHubu je viac ako 7 GB, môžete ho však povrchne klonovať za menej ako 1 GB.

Git Plytký klon a história

Plytké klonovanie môžete lokálne skontrolovať vo svojom vlastnom úložisku. Vytvorme súbor v našom miestnom úložisku, urobme zmeny a 10-krát ho odovzdajme. A potom môžeme klonovať úložisko:

$ mkdir _príklad
$ cd _príklad
$ ls
$ git init
Inicializované prázdne úložisko Git v / Users / zakh / git_repo / _example /.git /
$ echo x> veľký_súbor
$ git pridať -A
$ git commit -m "Počiatočné potvrdenie"
[master (root-commit) dd11686] Počiatočné potvrdenie
1 súbor zmenený, 1 vloženie (+)
vytvoriť režim 100644 large_file
$ echo xx> veľký_súbor
$ git pridať -A
$ git commit -m "Úprava veľkého súboru 1"
[master 9efa367] Úprava veľkého súboru 1
1 súbor zmenený, 1 vloženie (+), 1 odstránenie (-)


$ mkdir test
$ cd test
$ git klonovaný súbor: //// Users / zakh / git_repo / _example
Klonovanie do „_example“ ..
remote: Počítanie objektov: 33, hotovo.
remote: Kompresia objektov: 100% (22/22), hotovo.
remote: Total 33 (delta 10), reused 0 (delta 0)
Príjem predmetov: 100% (33/33), 50.03 MiB | 42.10 MiB / s, hotovo.
Riešenie delt: 100% (10/10), hotovo.
Prebieha kontrola pripojenia ... hotovo.

V tomto príklade sme vytvorili priečinok _example git v priečinku / Users / zakh / git_repo / s jedným veľkým súborom. Zobrazia sa iba prvé dva potvrdenia. Potom vytvárame úplný klon tohto úložiska na inom mieste.

Potom skontrolujme históriu našich záväzkov:

$ git log - online
7fa451f Úprava veľkého súboru 10
648d8c9 Úprava veľkého súboru 9
772547a Úprava veľkého súboru 8
13dd9ab Úprava veľkého súboru 7
5e73b67 Úprava súboru large_file 6
030a6e7 Úprava súboru large_file 5
1d14922 Úprava súboru large_file 4
bc0f2c2 Úprava súboru large_file 3
2794f11 Úprava veľkého súboru 2
d4374fb Úprava veľkého súboru 1
924829d Počiatočné potvrdenie

Vidíme všetky záväzky v úplnom klone.
Teraz poďme odstrániť aktuálnu kópiu a potom plytký klon s hĺbkou 1:

$ git clone - hĺbka 1 súboru: //// Users / zakh / git_repo / _example
Klonovanie do „_example“ ..
remote: Počítanie objektov: 3, hotovo.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Príjem predmetov: 100% (3/3), 50.02 MiB | 65.12 MiB / s, hotovo.
Prebieha kontrola pripojenia ... hotovo.

Ak sa teraz pozrieme na históriu, vidíme iba poslednú históriu potvrdenia:

$ git log - online
7fa451f Úprava veľkého súboru 10

Poďme plytký klon s hĺbkou 3:

$ git clone - súbor hĺbky 3: //// Users / zakh / git_repo / _example
Klonovanie do „_example“ ..
remote: Počítanie objektov: 9, hotovo.
remote: Kompresia objektov: 100% (6/6), hotovo.
remote: Total 9 (delta 2), reused 0 (delta 0)
Príjem predmetov: 100% (9/9), 50.02 MiB | 65.15 MiB / s, hotovo.
Riešenie delt: 100% (2/2), hotovo.
Prebieha kontrola pripojenia ... hotovo.

Teraz vidíme viac záväzkov:

$ git log - online
7fa451f Úprava veľkého súboru 10
648d8c9 Úprava veľkého súboru 9
772547a Úprava veľkého súboru 8

Problémy s plytkým klonom Git

Používatelia by mali pochopiť, že veľkosť a čas potrebný na stiahnutie závisí od organizácie záväzkov. Môžu sa výrazne líšiť od jedného úložiska k druhému. Je dobré otestovať úložisko s plytkým klonom, aby ste zistili, koľko miesta na pevnom disku a čas sťahovania vám ušetrí.

Ďalším aspektom je, že aj keď môžete tlačiť kód z plytkého klonu, môže to trvať dlhšie kvôli výpočtom medzi vzdialeným a lokálnym serverom. Pokiaľ teda pravidelne zadávate kód z miestnej kópie, malo by pravdepodobne zmysel použiť celý klon.

Možnosť viacerých pobočiek

Keď použijete príznak -depth s príkazom clone, Git predvolene použije príznak -single-branch. Môžete však použiť príznak -no-jednu vetvu, aby ste povedali Gitu, aby získal históriu zo zadanej hĺbky každej vetvy.

Tu sú vetvy Django bez možnosti -no-single-branch (hĺbka 1):

$ git pobočka -a
* pán
diaľkové ovládače / pôvod / HLAVA -> pôvod / majster
diaľkové ovládače / pôvod / majster

Prítomná je iba hlavná pobočka.

Tu sú pobočky Django po použití možnosti -no-single-branch:

$ git clone --depth 1 --no-single-branch https: // github.com / django / django.git
Klonovanie do 'django' ..
remote: Počítanie objektov: 95072, hotovo.
remote: Compressing objects: 100% (42524/42524), done.
remote: Total 95072 (delta 52343), reused 82284 (delta 42389), pack-reused 0
Príjem predmetov: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, hotovo.
Riešenie delt: 100% (52343/52343), hotovo.
Prebieha kontrola pripojenia ... hotovo.
Odhlásenie súborov: 100% (5860/5860), hotovo.
$ du -sh django
124M django

Všimnite si, že aj keď je hĺbka stále 1, veľkosť klonu je 124M namiesto 55M pre predchádzajúci prípad.
Ak skontrolujeme vetvy, na tomto klone by sme mali vidieť oveľa viac vetiev:

$ cd django
$ git pobočka -a
* pán
diaľkové ovládače / pôvod / HLAVA -> pôvod / majster
diaľkové ovládače / origin / podkrovie / boulder-oracle-šprint
diaľkové ovládače / pôvod / podkrovie / úplná história
diaľkové ovládače / pôvod / podkrovie / generické overenie
diaľkové ovládače / pôvod / podkrovie / gis
diaľkové ovládače / pôvod / podkrovie / i18n
diaľkové ovládače / pôvod / podkrovie / odstránenie mágie
diaľkové ovládače / pôvod / podkrovie / viacnásobné overenie
remotes / origin / attic / multiple-db-support
diaľkové ovládače / pôvod / podkrovie / nový-správca
diaľkové ovládače / origin / podkrovie / newforms-admin
diaľkové ovládače / pôvod / podkrovie / povolenia pre jednotlivé objekty
diaľkové ovládače / pôvod / podkrovie / súprava dotazov-refaktor
diaľkové ovládače / pôvod / podkrovie / vývoj schémy
diaľkové ovládače / origin / podkrovie / schema-evolution-ng
diaľkové ovládače / pôvod / podkrovie / search-api
diaľkové ovládače / pôvod / podkrovie / sqlalchemy
diaľkové ovládače / pôvod / podkrovie / unicode
diaľkové ovládače / pôvod / majster
diaľkové ovládače / origin / soc2009 / admin-ui
diaľkové ovládače / origin / soc2009 / http-wsgi-vylepšenia
diaľkové ovládače / origin / soc2009 / i18n-vylepšenia
diaľkové ovládače / origin / soc2009 / validácia modelu
diaľkové ovládače / origin / soc2009 / multidb
diaľkové ovládače / origin / soc2009 / test-vylepšenia
diaľkové ovládače / origin / soc2010 / načítanie aplikácií
remotes / origin / soc2010 / query-refactor
diaľkové ovládače / origin / soc2010 / test-refaktor
diaľkové ovládače / pôvod / stabilné / 0.90.X
diaľkové ovládače / pôvod / stabilné / 0.91.X
diaľkové ovládače / pôvod / stabilné / 0.95.X
diaľkové ovládače / pôvod / stabilné / 0.96.X
diaľkové ovládače / pôvod / stabilné / 1.0.X
diaľkové ovládače / pôvod / stabilné / 1.1.X
diaľkové ovládače / pôvod / stabilné / 1.10.X
diaľkové ovládače / pôvod / stabilné / 1.11.X
diaľkové ovládače / pôvod / stabilné / 1.2.X
diaľkové ovládače / pôvod / stabilné / 1.3.X
diaľkové ovládače / pôvod / stabilné / 1.4.X
diaľkové ovládače / pôvod / stabilné / 1.5.X
diaľkové ovládače / pôvod / stabilné / 1.6.X
diaľkové ovládače / pôvod / stabilné / 1.7.X
diaľkové ovládače / pôvod / stabilné / 1.8.X
diaľkové ovládače / pôvod / stabilné / 1.9.X
diaľkové ovládače / pôvod / stabilné / 2.0.X

Zhrnutie

Plytký klon Git vám môže pomôcť ušetriť čas a miesto na pevnom disku. Má to však svoju cenu. Ak pravidelne posúvate kód do vzdialených úložísk, predĺži sa to doba potvrdenia. Pre bežné pracovné postupy je teda dobré vyhnúť sa plytkým klonom.

Referencie:

Hry Vulkan pre používateľov systému Linux
Vulkan pre používateľov systému Linux
S každou novou generáciou grafických kariet vidíme, že vývojári hier posúvajú hranice grafickej vernosti a prichádzajú o krok bližšie k fotorealizmu. ...
Hry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Vytvorenie vlastnej simulácie dopravy môže byť zábavné, relaxačné a mimoriadne lákavé. Preto sa musíte uistiť, že vyskúšate čo najviac hier, aby ste n...
Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z najpopulárnejších obchodných simulačných hier. V tejto hre musíte vytvoriť úžasné dopravné podnikanie. Začnete však na začiatku ok...