Suprasti Git seklų kloną ir klono gylį
„Git“ yra paskirstyta versijų valdymo sistema. Tai yra vienas iš „Git“ naudojimo pranašumų. Norint dirbti vietoje, nereikia priklausyti nuo centrinio serverio ar saugyklos. Viskas, ko jums reikia dėl modulių istorijos, yra ranka pasiekiami. Tačiau tai gali tapti problema, kai susiduriate su saugyklomis su dideliais dvejetainiais failais arba saugyklomis, turinčiomis ilgą istoriją. Ypač jei turite situaciją, kai ją reikia atsisiųsti kaskart iš naujo, pvz., Sukūrimo serverį, dydis ir atsisiuntimo laikas gali tapti problema.
„Git“ problemos sprendimas yra seklus klonas, kuriame galite naudoti klono gylį, kad apibrėžtumėte, koks gylis turėtų būti jūsų klonas. Pvz., Jei naudojate -depth 1, tada klonavimo metu „Git“ gaus tik naujausią atitinkamų failų kopiją. Tai gali sutaupyti daug vietos ir laiko.
Git seklus klonas ir dydis
Pažvelkime į populiarią „Git“ „Django“ saugyklą. Jei visiškai klonuosite atpirkimą, gausite:
$ git klonas https: // github.com / django / django.gitKlonavimas į „django“…
nuotolinis: objektų skaičiavimas: 409053, atlikta.
nuotolinis: objektų suspaudimas: 100% (26/26), atlikta.
nuotolinis: iš viso 409053 (6 delta), pakartotinai panaudotas 8 (1 delta), pakartotinai panaudotas pakuotėje 409026
Gaunantys objektai: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, atlikta.
Deltų sprendimas: 100% (297045/297045), padaryta.
Tikrinamas ryšys ... padaryta.
Failų tikrinimas: 100% (5860/5860), atlikta.
Dabar, jei patikrinsite vietinės kopijos dydį, tai yra:
$ du -sh django /225M django /
Įsigykime tą pačią „Django“ saugyklą su negiliu klonu:
$ git klonas - 1 gylis https: // github.com / django / django.gitKlonavimas į „django“ ..
nuotolinis: objektų skaičiavimas: 8091, atlikta.
nuotolinis: objektų suspaudimas: 100% (4995/4995), atlikta.
nuotolinis: iš viso 8091 (delta 2036), pakartotinai panaudotas 5507 (delta 1833), pakuotėje pakartotinai panaudota 0
Priimantys objektai: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, atlikta.
Deltų sprendimas: 100% (2036/2036), padaryta.
Tikrinamas ryšys ... padaryta.
Failų tikrinimas: 100% (5860/5860), atlikta.
Dabar, jei patikrinsite vietinės kopijos dydį, jis turėtų būti žymiai mažesnis:
$ du -sh django /55 mln. Django /
Kai jūsų serveris susiduria su šimtais produktų linijų, toks kietojo disko vietos taupymas gali būti naudingas. Žaidimų projektuose, kuriuose yra daugybė dvejetainių programų, tai gali turėti dramatišką poveikį. Tai taip pat padeda įgyvendinant ilgalaikius projektus. Pvz., Visas „Linux“ talpyklos klonavimas iš „GitHub“ yra didesnis nei 7 GB, tačiau galite klonuoti mažiau nei 1 GB.
Gitas seklus klonas ir istorija
Galite vietoje patikrinti seklų klonavimą naudodami savo saugyklą. Sukurkime failą savo vietinėje saugykloje, atlikime pakeitimus ir atlikime 10 kartų. Tada galime klonuoti saugyklą:
$ mkdir _pavyzdys$ cd _pavyzdys
$ ls
$ git init
Inicijuota tuščia „Git“ saugykla aplanke / Vartotojai / zakh / git_repo / _example /.git /
$ echo x> didelis_failas
$ git pridėti -A
$ git įsipareigoti -m "Pradinis įsipareigojimas"
[meistras (šaknis-įsipareigoti) dd11686] Pradinis įsipareigojimas
1 failas pakeistas, 1 įterpimas (+)
sukurti režimą 100644 didelis_failas
$ echo xx> didelis_failas
$ git pridėti -A
$ git įsipareigoti -m "1 didelio_failo modifikavimas"
[master 9efa367] 1 didelio_failo modifikacija
1 failas pakeistas, 1 įterpimas (+), 1 ištrintas (-)
…
…
$ mkdir testas
$ cd testas
$ git klono failas: //// Vartotojai / zakh / git_repo / _example
Klonuojama į „_example“ ..
nuotolinis: objektų skaičiavimas: 33, atlikta.
nuotolinis: objektų suspaudimas: 100% (22/22), atlikta.
nuotolinis: iš viso 33 (delta 10), pakartotinai panaudotas 0 (delta 0)
Priimantys objektai: 100% (33/33), 50.03 MiB | 42.10 MiB / s, atlikta.
Deltų sprendimas: 100% (10/10), padaryta.
Tikrinamas ryšys ... padaryta.
Šiame pavyzdyje sukūrėme _example git saugyklą aplanke / Vartotojai / zakh / git_repo / su vienu dideliu_file. Rodomi tik pirmieji du įsipareigojimai. Tada kuriame visą tos saugyklos kloną kitoje vietoje.
Tada patikrinkime savo įsipareigojimų istoriją:
$ git žurnalas - tiesioginis7fa451f 10 didelio_failo pakeitimas
648d8c9 „9 didelio failo“ pakeitimas
772547a 8 didelių failų pakeitimas
13dd9ab „large_file“ modifikavimas 7
5e73b67 „6_ didelio failo“ pakeitimas
030a6e7 5 didelio failo modifikavimas
1d14922 4 didelio failo pakeitimas
bc0f2c2 3 didelių failų pakeitimas
2794f11 2 didelio_failo pakeitimas
d4374fb 1 didelio_failo pakeitimas
924829d Pradinis įsipareigojimas
Visus įsipareigojimus matome visame klone.
Dabar ištrinkime dabartinę kopiją ir tada seklų kloną, kurio gylis yra 1:
Klonuojama į „_example“ ..
nuotolinis: objektų skaičiavimas: 3, atlikta.
nuotolinis: objektų suspaudimas: 100% (2/2), atlikta.
nuotolinis: iš viso 3 (delta 0), pakartotinai panaudotas 0 (delta 0)
Priimantys objektai: 100% (3/3), 50.02 MiB | 65.12 MiB / s, atlikta.
Tikrinamas ryšys ... padaryta.
Jei pažvelgsime į istoriją dabar, matome tik paskutinę įsipareigojimų istoriją:
$ git žurnalas - tiesioginis7fa451f 10 didelio_failo pakeitimas
Tegul seklus klonas, kurio gylis 3:
$ git clone - 3 gylio failas: //// Vartotojai / zakh / git_repo / _exampleKlonuojama į „_example“ ..
nuotolinis: objektų skaičiavimas: 9, atlikta.
nuotolinis: objektų suspaudimas: 100% (6/6), atlikta.
nuotolinis: Iš viso 9 (delta 2), pakartotinai panaudotas 0 (delta 0)
Priimantys objektai: 100% (9/9), 50.02 MiB | 65.15 MiB / s, atlikta.
Deltų sprendimas: 100% (2/2), padaryta.
Tikrinamas ryšys ... padaryta.
Dabar matome daugiau įsipareigojimų:
$ git žurnalas - tiesioginis7fa451f 10 didelio_failo pakeitimas
648d8c9 „9 didelio failo“ pakeitimas
772547a 8 didelių failų pakeitimas
Problemos su „Git Shallow Clone“
Vartotojai turėtų suprasti, kad dydis ir sutaupytas atsisiuntimo laikas priklauso nuo įsipareigojimų organizavimo. Jie gali labai skirtis skirtingose saugyklose. Verta išbandyti saugyklą naudojant negilų kloną, kad patikrintumėte, kiek vietos standžiajame diske ir atsisiuntimo metu sutaupysite.
Kitas dalykas yra tas, kad net jei jūs galite perkelti kodą iš seklaus klono, tai gali užtrukti ilgiau, nes skaičiavimai atliekami tarp nuotolinio ir vietinio serverio. Taigi, jei reguliariai vykdote kodą iš vietinės kopijos, tikriausiai yra prasminga naudoti visą kloną.
Kelių filialų variantas
Kai naudojate vėliavą -depth with clone, Git pagal nutylėjimą prisiima vėliavą -vienos šakos. Bet jūs galite naudoti -no-single-branch vėliavą, kad nurodytumėte Gitui gauti istorijas iš nurodyto kiekvienos šakos gylio.
Čia yra „Django“ filialai be parinkties -no-one-branch (1 gylis):
$ git filialas -a* meistras
pulteliai / kilmė / GALVA -> kilmė / valdytojas
pulteliai / kilmė / meistras
Yra tik pagrindinis filialas.
Čia yra „Django“ filialai, panaudojus parinktį -no-one-branch:
$ git klonas - 1 gylis - nėra vienos šakos https: // github.com / django / django.gitKlonavimas į „django“…
nuotolinis: objektų skaičiavimas: 95072, atlikta.
nuotolinis: objektų suspaudimas: 100% (42524/42524), atlikta.
nuotolinis: Iš viso 95072 (delta 52343), pakartotinai panaudota 82284 (delta 42389), pakuotėje pakartotinai panaudota 0
Gaunantys objektai: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, atlikta.
Deltų sprendimas: 100% (52343/52343), padaryta.
Tikrinamas ryšys ... padaryta.
Failų tikrinimas: 100% (5860/5860), atlikta.
$ du -sh django
124M django
Atkreipkite dėmesį, nors gylis vis dar yra 1, klono dydis yra 124M, o ne ankstesnio atvejo 55M.
Jei patikrinsime šakas, turėtume pamatyti daug daugiau šakų šiame klone:
$ git filialas -a
* meistras
pulteliai / kilmė / GALVA -> kilmė / valdytojas
pulteliai / kilmė / palėpė / riedulys-orakulas-sprintas
pulteliai / kilmė / palėpė / visa istorija
nuotolinio valdymo pultai / kilmė / palėpė / bendrasis autorius
pulteliai / kilmė / palėpė / gis
pulteliai / kilmė / palėpė / i18n
pulteliai / kilmė / palėpė / magijos pašalinimas
pulteliai / kilmė / palėpė / kelių autor
nuotolinio valdymo pultai / kilmė / mansarda / daugybinis db palaikymas
pulteliai / kilmė / palėpė / naujas-administratorius
pulteliai / kilmė / palėpė / newforms-admin
nuotolinio valdymo pultai / kilmė / palėpė / objekto leidimai
pulteliai / kilmė / palėpė / queryset-refactor
pulteliai / kilmė / palėpė / schema-evoliucija
pulteliai / kilmė / palėpė / schema-evoliucija-ng
pulteliai / kilmė / palėpė / paieškos api
pulteliai / kilmė / palėpė / kvadlalchemija
nuotolinio valdymo pultai / kilmė / palėpė / unikodas
pulteliai / kilmė / meistras
pulteliai / kilmė / soc2009 / admin-ui
pulteliai / kilmė / soc2009 / http-wsgi-patobulinimai
pulteliai / kilmė / soc2009 / i18n-patobulinimai
pulteliai / kilmė / soc2009 / modelio patvirtinimas
pulteliai / origin / soc2009 / multidb
pulteliai / kilmė / soc2009 / testas-patobulinimai
pulteliai / origin / soc2010 / app-loading
pulteliai / kilmė / soc2010 / užklausos refaktorius
pulteliai / kilmė / soc2010 / test-refactor
pulteliai / kilmė / stabilus / 0.90.x
pulteliai / kilmė / stabilus / 0.91.x
pulteliai / kilmė / stabilus / 0.95.x
pulteliai / kilmė / stabilus / 0.96.x
pulteliai / kilmė / stabilus / 1.0.x
pulteliai / kilmė / stabilus / 1.1.x
pulteliai / kilmė / stabilus / 1.10.x
pulteliai / kilmė / stabilus / 1.11.x
pulteliai / kilmė / stabilus / 1.2.x
pulteliai / kilmė / stabilus / 1.3.x
pulteliai / kilmė / stabilus / 1.4.x
pulteliai / kilmė / stabilus / 1.5.x
pulteliai / kilmė / stabilus / 1.6.x
pulteliai / kilmė / stabilus / 1.7.x
pulteliai / kilmė / stabilus / 1.8.x
pulteliai / kilmė / stabilus / 1.9.x
pulteliai / kilmė / stabilus / 2.0.x
Santrauka
„Git“ negilus klonas gali padėti sutaupyti laiko ir vietos standžiajame diske. Bet tai turi savo kainą. Jei reguliariai perduodate kodą į nuotolines saugyklas, tai padidins įsipareigojimų vykdymo laiką. Taigi, norint reguliariai dirbti, verta vengti negilių klonų.
Nuorodos:
- git-clones-vs-sekli-git-klonai /
- bendruomenė.atlassian.com => klonas-gylis-daro-ką-kodėl-man rūpi šis nustatymas /
- git-scm.com / docs / git-clone
- jenkins.io => dideli git-repos.pdf
- vidutinis.com / @ wdyluis => git-gc-and-git-negilus klonas
- „stackoverflow“.com => git-clone-by-default-negiliai arba ne
- unix.kamino mainai.com => linux-branduolio-source-code-size-skirtumas
- atlassian.com => rankena-dideli-saugyklos-git
- jėgos.com => git-beyond-basics-using-negilūs klonai