Git

Git mělký klon a hloubka klonu

Git mělký klon a hloubka klonu

Pochopení mělkého klonu Git a hloubky klonu

Git je systém řízení distribuované verze. To je jedna z výhod používání Gitu. Abyste mohli pracovat lokálně, nemusíte být závislí na centrálním serveru nebo úložišti. Vše, co potřebujete, pokud jde o historii vašich modulů, máte na dosah ruky. Může se však stát problémem při práci s úložišti s velkými binárními soubory nebo úložišti, která mají dlouhou historii. Zvláště pokud máte situaci, kdy jej potřebujete stáhnout vždy čerstvé, například server sestavení, pak se velikost a časy stahování mohou stát problémem.

Gitovým řešením problému je mělký klon, kde můžete pomocí hloubky klonu definovat, jak hluboko by měl váš klon jít. Například pokud použijete -depth 1, pak během klonování Git získá pouze nejnovější kopii příslušných souborů. To vám může ušetřit spoustu místa a času.

Git mělký klon a velikost

Pojďme se podívat na populární úložiště Git pro Django. Pokud repo plně naklonujete, získáte následující:

$ git clone https: // github.com / django / django.sakra
Klonování do 'django' ..
remote: Počítání objektů: 409053, hotovo.
remote: Komprese objektů: 100% (26/26), hotovo.
remote: Total 409053 (delta 6), reused 8 (delta 1), pack-reused 409026
Příjem objektů: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, hotovo.
Řešení delt: 100% (297045/297045), hotovo.
Kontrola připojení… hotovo.
Odhlášení souborů: 100% (5860/5860), hotovo.

Pokud nyní zkontrolujete velikost vaší místní kopie, je to:

$ du -sh django /
225M django /

Pojďme získat stejné úložiště Django s mělkým klonem:

$ git clone - hloubka 1 https: // github.com / django / django.sakra
Klonování do 'django' ..
remote: Počítání objektů: 8091, hotovo.
remote: Komprese objektů: 100% (4995/4995), hotovo.
remote: Total 8091 (delta 2036), reused 5507 (delta 1833), pack-reused 0
Příjem objektů: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, hotovo.
Řešení delt: 100% (2036/2036), hotovo.
Kontrola připojení… hotovo.
Odhlášení souborů: 100% (5860/5860), hotovo.

Pokud nyní zkontrolujete velikost místní kopie, měla by být podstatně menší:

$ du -sh django /
55M django /

Pokud váš server pracuje se stovkami produktových řad, může být tento druh úspory místa na pevném disku užitečný. V případě herních projektů, kde existují těžké binární soubory, to může mít dramatický účinek. Pomáhá také při dlouhodobých projektech. Například úplné klonování repozitáře Linuxu z GitHubu je více než 7 GB, ale můžete jej povrchně klonovat za méně než 1 GB.

Git mělký klon a historie

Mělké klonování můžete místně vyzkoušet ve svém vlastním úložišti. Pojďme vytvořit soubor v našem místním úložišti, provést změny a potvrdit ho 10krát. A pak můžeme klonovat úložiště:

$ mkdir _příklad
$ cd _příklad
$ ls
$ git init
Inicializované prázdné úložiště Git v / Users / zakh / git_repo / _example /.git /
$ echo x> velký_soubor
$ git přidat -A
$ git commit -m "Počáteční potvrzení"
[master (root-commit) dd11686] Počáteční potvrzení
1 soubor změněn, 1 vložení (+)
vytvořit režim 100644 large_file
$ echo xx> velký_soubor
$ git přidat -A
$ git commit -m "Úprava velkého_souboru 1"
[master 9efa367] Úprava na velký_soubor 1
1 soubor změněn, 1 vložení (+), 1 smazání (-)


$ mkdir test
$ cd test
$ git klonový soubor: //// Users / zakh / git_repo / _example
Klonování do „_example“…
remote: Počítání objektů: 33, hotovo.
remote: Komprese objektů: 100% (22/22), hotovo.
dálkově: Celkem 33 (delta 10), znovu použito 0 (delta 0)
Příjem předmětů: 100% (33/33), 50.03 MiB | 42.10 MiB / s, hotovo.
Řešení delt: 100% (10/10), hotovo.
Kontrola připojení… hotovo.

V tomto příkladu jsme vytvořili _example úložiště git ve složce / Users / zakh / git_repo / s jedním velkým_souborem. Zobrazeny jsou pouze první dva závazky. Pak vytváříme úplný klon tohoto úložiště na jiném místě.

Pak se podívejme na historii našich závazků:

$ git log - online
7fa451f Úprava na velký_soubor 10
648d8c9 Úprava na velký_soubor 9
772547a Úprava souboru large_file 8
13dd9ab Úprava souboru large_file 7
5e73b67 Úprava souboru large_file 6
030a6e7 Úpravy na velký_soubor 5
1d14922 Úprava souboru large_file 4
bc0f2c2 Úprava souboru large_file 3
2794f11 Úprava na velký_soubor 2
d4374fb Úprava na velký_soubor 1
924829d Počáteční potvrzení

Vidíme všechny závazky v plném klonu.
Nyní odstraníme aktuální kopii a poté mělký klon s hloubkou 1:

$ git clone - hloubka 1 souboru: //// Users / zakh / git_repo / _example
Klonování do „_example“…
remote: Počítání objektů: 3, hotovo.
remote: Komprese objektů: 100% (2/2), hotovo.
remote: Celkem 3 (delta 0), znovu použito 0 (delta 0)
Příjem předmětů: 100% (3/3), 50.02 MiB | 65.12 MiB / s, hotovo.
Kontrola připojení… hotovo.

Podíváme-li se nyní na historii, vidíme pouze poslední historii potvrzení:

$ git log - online
7fa451f Úprava na velký_soubor 10

Pojďme mělký klon s hloubkou 3:

$ git clone - soubor hloubky 3: //// Users / zakh / git_repo / _example
Klonování do „_example“…
remote: Počítání objektů: 9, hotovo.
remote: Komprese objektů: 100% (6/6), hotovo.
dálkově: Celkem 9 (delta 2), znovu použito 0 (delta 0)
Příjem objektů: 100% (9/9), 50.02 MiB | 65.15 MiB / s, hotovo.
Řešení delt: 100% (2/2), hotovo.
Kontrola připojení… hotovo.

Nyní vidíme více závazků:

$ git log - online
7fa451f Úprava na velký_soubor 10
648d8c9 Úprava na velký_soubor 9
772547a Úprava souboru large_file 8

Problémy s mělkým klonem Git

Uživatelé by měli pochopit, že velikost a úspora času při stahování závisí na organizaci závazků. Mohou se výrazně lišit od jednoho úložiště k druhému. Je dobré otestovat úložiště s mělkým klonem a zkontrolovat, kolik místa na pevném disku a čas stahování vám ušetří.

Další úvaha spočívá v tom, že i když můžete posunout kód z mělkého klonu, může to trvat déle kvůli výpočtům mezi vzdáleným a místním serverem. Pokud tedy pravidelně zadáváte kód z místní kopie, pravděpodobně má smysl použít celý klon.

Možnost více poboček

Když použijete příznak -depth s příkazem clone, předpokládá Git ve výchozím nastavení příznak -single-branch. Ale můžete použít příznak -no-single-branch, abyste řekli Gitu, aby získal historii ze zadané hloubky každé větve.

Zde jsou větve Django bez možnosti -no-single-branch (hloubka 1):

$ git větev -a
* mistr
dálkové ovladače / počátek / HLAVA -> počátek / hlavní
dálkové ovladače / původ / master

Je přítomna pouze hlavní větev.

Tady jsou větve Django po použití volby -no-single-branch:

$ git clone --depth 1 --no-single-branch https: // github.com / django / django.sakra
Klonování do 'django' ..
remote: Počítání objektů: 95072, hotovo.
remote: Komprese objektů: 100% (42524/42524), hotovo.
dálkově: Celkem 95072 (delta 52343), znovu použito 82284 (delta 42389), znovu použito v balíčku 0
Příjem objektů: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, hotovo.
Řešení delt: 100% (52343/52343), hotovo.
Kontrola připojení… hotovo.
Odhlášení souborů: 100% (5860/5860), hotovo.
$ du -sh django
124M django

Všimněte si, že i když je hloubka stále 1, velikost klonu je 124M místo 55M pro předchozí případ.
Pokud zkontrolujeme větve, měli bychom na tomto klonu vidět mnohem více větví:

$ cd django
$ git větev -a
* mistr
dálkové ovladače / počátek / HLAVA -> počátek / hlavní
dálkové ovladače / původ / podkroví / balvan-věštec-sprint
dálkové ovladače / původ / podkroví / plná historie
dálkové ovladače / původ / podkroví / generické ověření
dálkové ovladače / původ / podkroví / gis
dálkové ovladače / původ / podkroví / i18n
dálkové ovladače / původ / podkroví / odstranění magie
dálkové ovladače / původ / podkroví / více autor
remotes / origin / attic / multiple-db-support
dálkové ovladače / původ / podkroví / nový-administrátor
remotes / origin / attic / newforms-admin
dálkové ovládání / původ / podkroví / oprávnění pro každý objekt
dálkové ovladače / původ / podkroví / sada dotazů-refaktor
dálkové ovladače / původ / podkroví / vývoj schématu
dálkové ovladače / origin / podkroví / schema-evolution-ng
dálkové ovladače / původ / podkroví / search-api
dálkové ovladače / původ / podkroví / sqlalchemy
dálkové ovladače / původ / podkroví / unicode
dálkové ovladače / původ / master
dálkové ovladače / origin / soc2009 / admin-ui
dálková ovládání / origin / soc2009 / http-wsgi-vylepšení
dálková ovládání / origin / soc2009 / i18n - vylepšení
dálkové ovladače / origin / soc2009 / ověření modelu
dálkové ovladače / origin / soc2009 / multidb
dálkové ovladače / origin / soc2009 / test-vylepšení
dálkové ovladače / origin / soc2010 / načítání aplikací
dálkové ovladače / origin / soc2010 / refaktor dotazu
dálkové ovladače / origin / soc2010 / test-refaktor
dálkové ovladače / původ / stabilní / 0.90.X
dálkové ovladače / původ / stabilní / 0.91.X
dálkové ovladače / původ / stabilní / 0.95.X
dálkové ovladače / původ / stabilní / 0.96.X
dálkové ovladače / původ / stabilní / 1.0.X
dálkové ovladače / původ / stabilní / 1.1.X
dálkové ovladače / původ / stabilní / 1.10.X
dálkové ovladače / původ / stabilní / 1.11.X
dálkové ovladače / původ / stabilní / 1.2.X
dálkové ovladače / původ / stabilní / 1.3.X
dálkové ovladače / původ / stabilní / 1.4.X
dálkové ovladače / původ / stabilní / 1.5.X
dálkové ovladače / původ / stabilní / 1.6.X
dálkové ovladače / původ / stabilní / 1.7.X
dálkové ovladače / původ / stabilní / 1.8.X
dálkové ovladače / původ / stabilní / 1.9.X
dálkové ovladače / původ / stabilní / 2.0.X

souhrn

Git mělký klon vám pomůže ušetřit čas a místo na pevném disku. Ale přichází za cenu. Pokud pravidelně posíláte kód do vzdálených úložišť, zvýší se časy potvrzení. U běžných pracovních postupů je tedy dobré vyhnout se mělkým klonům.

Reference:

Přemapujte tlačítka myši odlišně pro jiný software pomocí ovládání myší X-Mouse
Možná potřebujete nástroj, který by mohl změnit ovládání myši u každé aplikace, kterou používáte. V takovém případě můžete vyzkoušet aplikaci s názvem...
Recenze bezdrátové myši Microsoft Sculpt Touch
Nedávno jsem četl o Microsoft Sculpt Touch bezdrátová myš a rozhodl se ji koupit. Po chvíli používání jsem se rozhodl se s ním podělit o své zkušenost...
Trackpad a ukazatel myši AppyMouse na obrazovce pro tablety Windows
Uživatelé tabletů často postrádají ukazatel myši, zejména když obvykle používají notebooky. Dotykové smartphony a tablety mají mnoho výhod a jediným o...