Izpratne par Git seklo klonu un klona dziļumu
Git ir izplatīta versiju kontroles sistēma. Tā ir viena no Git izmantošanas priekšrocībām. Lai strādātu lokāli, jums nav jābūt atkarīgam no centrālā servera vai krātuves. Viss, kas jums nepieciešams attiecībā uz moduļu vēsturi, ir tieši jūsu rokai. Tomēr tā var kļūt par problēmu, ja jums ir darīšana ar krātuvēm ar lieliem bināriem failiem vai krātuvēm, kurām ir ilga vēsture. It īpaši, ja jums ir situācija, kad jums tas katru reizi ir jālejupielādē no jauna, piemēram, būvēšanas serveris, lielums un lejupielādes laiks var kļūt par problēmu.
Git problēmas risinājums ir sekls klons, kur jūs varat izmantot klona dziļumu, lai noteiktu, cik dziļi jūsu klonam vajadzētu iet. Piemēram, ja izmantojat -depth 1, tad klonēšanas laikā Git saņems tikai attiecīgo failu jaunāko kopiju. Tas var ietaupīt daudz vietas un laika.
Git sekls klons un izmērs
Apskatīsim populāro Gjan krātuvi Django. Ja jūs pilnībā klonējat repo, jūs saņemat sekojošo:
$ git klons https: // github.com / django / django.gitKlonēšana “django”…
tālvadība: Objektu skaitīšana: 409053, pabeigta.
tālvadība: Objektu saspiešana: 100% (26/26), pabeigta.
tālvadība: kopā 409053 (delta 6), atkārtoti izmantota 8 (delta 1), atkārtoti izmantota iepakojumā 409026
Objektu saņemšana: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, izdarīts.
Deltas atrisināšana: 100% (297045/297045), izdarīts.
Savienojamības pārbaude ... pabeigta.
Failu pārbaude: 100% (5860/5860), pabeigts.
Ja pārbaudīsit vietējās kopijas lielumu, tas ir:
$ du -sh django /225M django /
Iegūsim to pašu Django repozitoriju ar seklu klonu:
$ git klons - 1. dziļums https: // github.com / django / django.gitKlonēšana “django”…
tālvadība: Objektu skaitīšana: 8091, pabeigta.
tālvadība: Objektu saspiešana: 100% (4995/4995), pabeigta.
tālvadības pults: Kopā 8091 (delta 2036), atkārtoti izmantota 5507 (delta 1833), iepakojumā atkārtoti izmantota 0
Objektu saņemšana: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, izdarīts.
Deltas atrisināšana: 100% (2036/2036), izdarīts.
Savienojamības pārbaude ... pabeigta.
Failu pārbaude: 100% (5860/5860), pabeigts.
Tagad, pārbaudot vietējās kopijas lielumu, tam jābūt ievērojami mazākam:
$ du -sh django /55 miljoni django /
Kad jūsu serveris nodarbojas ar simtiem produktu līniju, šāda veida cietā diska vietas ietaupīšana var būt noderīga. Spēļu projektos, kur ir smagi bināri, tam var būt dramatisks efekts. Tas palīdz arī ilgstošos projektos. Piemēram, pilns Linux repozitorija klonēšana no GitHub ir lielāka par 7 GB, taču jūs to varat klonēt zemāk par 1 GB.
Git seklais klons un vēsture
Jūs varat lokāli pārbaudīt seklu klonēšanu ar savu krātuvi. Izveidosim failu mūsu vietējā repozitorijā, veiksim izmaiņas un izdarīsim to 10 reizes. Un tad mēs varam klonēt repozitoriju:
$ mkdir _piemērs$ cd _piemērs
$ ls
$ git init
Inicializēta tukša Git krātuve mapē / Lietotāji / zakh / git_repo / _example /.git /
$ echo x> liels_fails
$ git pievienot -A
$ git saistības -m "Sākotnējā saistība"
[galvenais (sakne-apņemšanās) dd11686] Sākotnējā saistība
1 fails mainīts, 1 ievietots (+)
izveidot režīmu 100644 lielais_fails
$ echo xx> liels_fails
$ git pievienot -A
$ git saistīt -m "Liela_faila 1 modifikācija"
[master 9efa367] Modifikācija lielajam failam 1
1 fails mainīts, 1 ievietošana (+), 1 dzēšana (-)
…
…
$ mkdir tests
$ cd tests
$ git klona fails: //// Users / zakh / git_repo / _example
Klonēšana “_example”…
tālvadība: Objektu skaitīšana: 33, pabeigta.
tālvadība: Objektu saspiešana: 100% (22/22), pabeigta.
tālvadība: kopā 33 (delta 10), atkārtoti izmantota 0 (delta 0)
Objektu saņemšana: 100% (33/33), 50.03 MiB | 42.10 MiB / s, izdarīts.
Deltu atrisināšana: 100% (10/10), darīts.
Savienojamības pārbaude ... pabeigta.
Šajā piemērā esam izveidojuši _example git krātuvi mapē / Users / zakh / git_repo / ar vienu lielu_failu. Tiek parādītas tikai pirmās divas saistības. Tad mēs izveidojam pilnu šīs krātuves klonu citā vietā.
Tad pārbaudīsim mūsu saistību vēsturi:
$ git log - tiešsaistē7fa451f Liela_faila modifikācija 10
648d8c9 Liela_faila 9 modifikācija
772547a 8. lielās_datnes modifikācija
13dd9ab Liela_faila pārveidošana 7
5e73b67 Liela_faila pārveidošana 6
030a6e7 5. lielā faila modifikācija
1d14922 4. lielā faila modifikācija
bc0f2c2 Liela_faila modifikācija 3
2794f11 2. lielā faila modifikācija
d4374fb Liela_faila modifikācija 1
924829d Sākotnējā saistība
Mēs redzam visas saistības pilnā klonā.
Tagad izdzēsīsim pašreizējo kopiju un pēc tam seklu klonu ar dziļumu 1:
Klonēšana “_example”…
tālvadība: Objektu skaitīšana: 3, pabeigta.
tālvadība: Objektu saspiešana: 100% (2/2), pabeigta.
tālvadības pults: kopā 3 (delta 0), atkārtoti izmantota 0 (delta 0)
Objektu saņemšana: 100% (3/3), 50.02 MiB | 65.12 MiB / s, izdarīts.
Savienojamības pārbaude ... pabeigta.
Ja mēs tagad skatāmies vēsturē, mēs redzam tikai pēdējo saistību vēsturi:
$ git log - tiešsaistē7fa451f Liela_faila modifikācija 10
Let's sekls klons ar dziļumu 3:
$ git clone - 3. dziļuma fails: //// Users / zakh / git_repo / _exampleKlonēšana “_example”…
tālvadība: Objektu skaitīšana: 9, pabeigta.
tālvadība: Objektu saspiešana: 100% (6/6), pabeigta.
tālvadība: kopā 9 (delta 2), atkārtoti izmantota 0 (delta 0)
Objektu saņemšana: 100% (9/9), 50.02 MiB | 65.15 MiB / s, izdarīts.
Deltas atrisināšana: 100% (2/2), darīts.
Savienojamības pārbaude ... pabeigta.
Tagad mēs redzam vairāk apņemšanos:
$ git log - tiešsaistē7fa451f Liela_faila modifikācija 10
648d8c9 Liela_faila 9 modifikācija
772547a 8. lielās_datnes modifikācija
Problēmas ar Git Shallow Clone
Lietotājiem vajadzētu saprast, ka izmēru un lejupielādes laika ietaupījums ir atkarīgs no saistību organizācijas. Katrā krātuvē tie var ievērojami atšķirties. Ir ieteicams pārbaudīt krātuvi ar seklu klonu, lai pārbaudītu, cik daudz vietas cietajā diskā un lejupielādes laiks ietaupīs.
Vēl viens apsvērums ir tas, ka, pat ja jūs varat nospiest kodu no sekla klona, tas var aizņemt vairāk laika, jo aprēķini notiek starp attālo un vietējo serveri. Tātad, ja jūs regulāri veicat kodu no vietējās kopijas, iespējams, ir lietderīgi izmantot pilnu klonu.
Vairāku filiāļu variants
Ja izmantojat karodziņu -depth ar klonu, Git pēc noklusējuma pieņem karodziņu -sara filiāle. Bet jūs varat izmantot karodziņu -no-single-branch karodziņu, lai Gitam teiktu, ka viņš iegūst vēstures no katra filiāles norādītā dziļuma.
Šeit ir Django filiāles bez opcijas -no-one-branch (1. dziļums):
$ git filiāle -a* meistars
pulti / izcelsme / GALVA -> izcelsme / meistars
pulti / izcelsme / kapteinis
Klāt ir tikai galvenā filiāle.
Pēc opcijas -no-single-branch izmantošanas ir Django filiāles:
$ git clone --depth 1 --no-one-branch https: // github.com / django / django.gitKlonēšana “django”…
tālvadība: Objektu skaitīšana: 95072, pabeigta.
tālvadība: Objektu saspiešana: 100% (42524/42524), pabeigta.
tālvadības pults: kopā 95072 (delta 52343), atkārtoti izmantota 82284 (delta 42389), atkārtoti izmantota paka 0
Objektu saņemšana: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, izdarīts.
Deltas atrisināšana: 100% (52343/52343), izdarīts.
Savienojamības pārbaude ... pabeigta.
Failu pārbaude: 100% (5860/5860), pabeigts.
$ du -sh django
124M django
Ievērojiet, kaut arī dziļums joprojām ir 1, klona izmērs ir 124M, nevis 55M iepriekšējā gadījumā.
Ja pārbaudām zarus, šajā klonā vajadzētu redzēt daudz vairāk zaru:
$ git filiāle -a
* meistars
pulti / izcelsme / GALVA -> izcelsme / meistars
pultis / izcelsme / bēniņi / laukakmens-orākuls-sprints
pultis / izcelsme / bēniņi / pilna vēsture
tālvadības pultis / izcelsme / bēniņi / vispārējs aut
pultis / izcelsme / bēniņi / gis
pultis / izcelsme / bēniņi / i18n
pultis / izcelsme / bēniņi / burvju noņemšana
tālvadības pultis / izcelsme / bēniņi / daudzaut
pultis / izcelsme / bēniņi / vairāku db-atbalsts
pultis / izcelsme / bēniņi / jauns-administrators
pultis / izcelsme / bēniņi / newforms-admin
pultis / izcelsme / bēniņi / atļaujas katram objektam
pultis / izcelsme / bēniņi / queryset-refactor
pultis / izcelsme / bēniņi / shēma-evolūcija
pultis / izcelsme / bēniņi / shēma-evolūcija-ng
pultis / izcelsme / bēniņi / meklēšana-api
tālvadības pultis / izcelsme / bēniņi / kvadlīmija
tālvadības pultis / izcelsme / bēniņi / unikods
pulti / izcelsme / kapteinis
tālvadības pultis / origin / soc2009 / admin-ui
pultis / origin / soc2009 / http-wsgi-uzlabojumi
pulti / origin / soc2009 / i18n-uzlabojumi
pulti / origin / soc2009 / modeļa validācija
pulti / origin / soc2009 / multidb
pulti / origin / soc2009 / test-uzlabojumi
tālvadības pultis / origin / soc2010 / app-loading
tālvadības pultis / origin / soc2010 / query-refactor
pultis / origin / soc2010 / test-refactor
pulti / izcelsme / stabils / 0.90.x
pulti / izcelsme / stabils / 0.91.x
pulti / izcelsme / stabils / 0.95.x
pulti / izcelsme / stabils / 0.96.x
pulti / izcelsme / stabils / 1.0.x
pulti / izcelsme / stabils / 1.1.x
pulti / izcelsme / stabils / 1.10.x
pulti / izcelsme / stabils / 1.11.x
pulti / izcelsme / stabils / 1.2.x
pulti / izcelsme / stabils / 1.3.x
pulti / izcelsme / stabils / 1.4.x
pulti / izcelsme / stabils / 1.5.x
pulti / izcelsme / stabils / 1.6.x
pulti / izcelsme / stabils / 1.7.x
pulti / izcelsme / stabils / 1.8.x
pulti / izcelsme / stabils / 1.9.x
pultis / izcelsme / stabils / 2.0.x
Kopsavilkums
Git seklais klons var palīdzēt ietaupīt laiku un vietu cietajā diskā. Bet tam ir sava cena. Ja jūs regulāri virzāt kodu uz attālajām krātuvēm, tas palielinās saistību izpildes laiku. Tāpēc parastām darbplūsmām ir ieteicams izvairīties no sekliem kloniem.
Atsauces:
- git-clones-vs-seklie-git-kloni /
- kopiena.atlassian.com => klona dziļums-dara-ko-kāpēc-es-rūpējos par šo iestatījumu /
- git-scm.com / docs / git-clone
- jenkins.io => liels-git-repos.pdf
- vidēja.com / @ wdyluis => git-gc-and-git-sekla klona
- stackoverflow.com => git-clone-by-default-sekla vai nē
- unix.stackexchange.com => linux-kodola-avota koda lieluma starpība
- atlassian.com => rokturi-lieli-krātuves-git
- piespiedu kārtā.com => git-pārsniedz-pamati-izmantojot seklus klonus