Git

Gitas seklus klonas ir klono gylis

Gitas seklus klonas ir klono gylis

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.git
Klonavimas į „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.git
Klonavimas į „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 - tiesioginis
7fa451f 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:

$ git clone - 1 gylio failas: //// Vartotojai / zakh / git_repo / _example
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 - tiesioginis
7fa451f 10 didelio_failo pakeitimas

Tegul seklus klonas, kurio gylis 3:

$ git clone - 3 gylio failas: //// Vartotojai / zakh / git_repo / _example
Klonuojama į „_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 - tiesioginis
7fa451f 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.git
Klonavimas į „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:

$ cd django
$ 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:

„OpenTTD“ ir „Simutrans“
Sukurti savo transporto modeliavimą gali būti smagu, atpalaiduojanti ir be galo viliojanti. Štai kodėl jūs turite įsitikinti, kad išbandėte kuo daugia...
„OpenTTD“ pamoka
„OpenTTD“ yra vienas iš populiariausių verslo modeliavimo žaidimų. Šiame žaidime turite sukurti nuostabų transporto verslą. Tačiau pradėsite nuo mažda...
„SuperTuxKart“, skirta „Linux“
„SuperTuxKart“ yra puikus pavadinimas, sukurtas nemokamai suteikti „Mario Kart“ patirtį jūsų „Linux“ sistemoje. Tai gana sudėtinga ir smagu žaisti, yr...