Git

Git plitki klon in globina klona

Git plitki klon in globina klona

Razumevanje Git plitvega klona in globine klona

Git je porazdeljeni sistem za nadzor različic. To je ena od prednosti uporabe Gita. Za lokalno delovanje vam ni treba biti odvisen od osrednjega strežnika ali repozitorija. Vse, kar potrebujete glede zgodovine modulov, je na dosegu roke. Vendar pa lahko postane problem, če imate opravka s skladišči z velikimi binarnimi datotekami ali skladišči z dolgo zgodovino. Še posebej, če imate situacijo, ko jo morate vsakič naložiti na novo, na primer strežnik za gradnjo, potem lahko velikost in čas prenosa postane problem.

Gitova rešitev problema je plitev klon, kjer lahko s pomočjo globine klona določite, kako globoko naj bo vaš klon. Če na primer uporabite -depth 1, bo Git med kloniranjem dobil samo najnovejšo kopijo ustreznih datotek. Prihranite lahko veliko prostora in časa.

Git plitki klon in velikost

Oglejmo si priljubljeno skladišče Git za Django. Če klonirate repo, dobite naslednje:

$ git klon https: // github.com / django / django.git
Kloniranje v "django" ..
daljinsko: Štetje predmetov: 409053, končano.
daljinsko: Stiskanje predmetov: 100% (26/26), končano.
daljinski upravljalnik: Skupaj 409053 (delta 6), ponovno uporabljena 8 (delta 1), embalaža ponovno uporabljena 409026
Sprejem predmetov: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, končano.
Razreševanje delt: 100% (297045/297045), končano.
Preverjanje povezanosti ... končano.
Preverjanje datotek: 100% (5860/5860), končano.

Zdaj, če preverite velikost lokalne kopije, je:

$ du -sh django /
225M django /

Pridobimo isto repozitorij Django s plitvim klonom:

$ git clone --depth 1 https: // github.com / django / django.git
Kloniranje v "django" ..
daljinsko: Štetje predmetov: 8091, končano.
daljinsko: Stiskanje predmetov: 100% (4995/4995), končano.
daljinsko: Skupaj 8091 (delta 2036), ponovno uporabljeno 5507 (delta 1833), ponovno uporabljeno 0
Sprejem predmetov: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, končano.
Reševanje delt: 100% (2036/2036), končano.
Preverjanje povezanosti ... končano.
Preverjanje datotek: 100% (5860/5860), končano.

Zdaj, če preverite velikost lokalne kopije, bi morala biti bistveno manjša:

$ du -sh django /
55M django /

Ko se vaš strežnik ukvarja s stotinami linij izdelkov, je tovrstno prihranek prostora na trdem disku lahko v pomoč. V primerih igralnih projektov, kjer obstajajo težke binarne datoteke, ima to lahko dramatičen učinek. Pomaga tudi pri dolgoletnih projektih. Na primer, celotno kloniranje repozitorija Linux iz GitHub je več kot 7 GB, vendar ga lahko plitko klonirate za manj kot 1 GB.

Git plitki klon in zgodovina

Lokalno preverite plitvo kloniranje z lastnim skladiščem. Ustvarimo datoteko v našem lokalnem repozitoriju, naredimo spremembe in jo naredimo 10-krat. In nato lahko kloniramo skladišče:

$ mkdir _primer
$ cd _primer
$ ls
$ git init
Inicializirano prazno repozitorij Git v / Users / zakh / git_repo / _example /.git /
$ echo x> velika_datoteka
$ git add -A
$ git commit -m "Začetna odobritev"
[master (root-commit) dd11686] Začetna odobritev
1 datoteka spremenjena, 1 vstavitev (+)
ustvari način 100644 velika_datoteka
$ echo xx> velika_datoteka
$ git add -A
$ git commit -m "Sprememba velike datoteke_"
[master 9efa367] Sprememba velike datoteke_1
1 datoteka spremenjena, 1 vstavljanje (+), 1 brisanje (-)
..
..
$ mkdir test
$ cd test
$ git klon datoteka: //// Users / zakh / git_repo / _example
Kloniranje v '_example' ..
daljinsko: Štetje predmetov: 33, končano.
daljinsko: Stiskanje predmetov: 100% (22/22), končano.
daljinsko: Skupaj 33 (delta 10), ponovno uporabljeno 0 (delta 0)
Sprejem predmetov: 100% (33/33), 50.03 MiB | 42.10 MiB / s, končano.
Razreševanje delt: 100% (10/10), končano.
Preverjanje povezanosti ... končano.

V tem primeru smo v mapi / Users / zakh / git_repo / ustvarili _example git repozitorij z eno samo datoteko large_file. Prikazana sta samo prva dva prevoda. Nato ustvarimo celoten klon tega skladišča na drugem mestu.

Potem preverimo zgodovino naših prevzemov:

$ git log --oneline
7fa451f Sprememba velike_datoteke 10
648d8c9 Sprememba v veliko_datoteko 9
772547a Sprememba velike_datoteke 8
13dd9ab Sprememba v veliko_datoteko 7
5e73b67 Sprememba velikega_datoteke6
030a6e7 Sprememba velike datoteke_5
1d14922 Sprememba velike datoteke_4
bc0f2c2 Sprememba velike_datoteke 3
2794f11 Sprememba velike_datoteke 2
d4374fb Sprememba velike_datoteke 1
924829d Začetna odobritev

Vse zaveze vidimo v popolnem klonu.
Zdaj izbrišimo trenutno kopijo in nato plitvi klon z globino 1:

$ git clone --depth 1 datoteka: //// Users / zakh / git_repo / _example
Kloniranje v '_example' ..
daljinsko: Štetje predmetov: 3, končano.
daljinsko: Stiskanje predmetov: 100% (2/2), končano.
daljinsko: skupaj 3 (delta 0), ponovno uporabljeno 0 (delta 0)
Sprejem predmetov: 100% (3/3), 50.02 MiB | 65.12 MiB / s, končano.
Preverjanje povezanosti ... končano.

Če zdaj pogledamo zgodovino, vidimo samo zadnjo zgodovino odobritve:

$ git log --oneline
7fa451f Sprememba velike datoteke_10

Plitvi klon z globino 3:

$ git clone --depth 3 datoteka: //// Uporabniki / zakh / git_repo / _example
Kloniranje v '_example' ..
daljinsko: Štetje predmetov: 9, končano.
daljinsko: Stiskanje predmetov: 100% (6/6), končano.
daljinsko: skupaj 9 (delta 2), ponovno uporabljeno 0 (delta 0)
Sprejem predmetov: 100% (9/9), 50.02 MiB | 65.15 MiB / s, končano.
Reševanje delt: 100% (2/2), končano.
Preverjanje povezanosti ... končano.

Zdaj vidimo še zaveze:

$ git log --oneline
7fa451f Sprememba velike datoteke_10
648d8c9 Sprememba v veliko_datoteko 9
772547a Sprememba velike_datoteke 8

Težave z Git Shallow Clone

Uporabniki bi morali razumeti, da je prihranek pri velikosti in času prenosa odvisen od organizacije prevzemov. Lahko se bistveno razlikujejo od enega do drugega odlagališča. Dobro je, da shrambo preizkusite s plitvim klonom, da preverite, koliko prostora na trdem disku in čas prenosa vam bo prihranil.

Drug premislek je, da čeprav lahko potisnete kodo iz plitvega klona, ​​lahko traja dlje zaradi izračunov med oddaljenim in lokalnim strežnikom. Če torej kodo redno izdajate iz lokalne kopije, je verjetno smiselno uporabiti celoten klon.

Možnost več podružnic

Ko uporabite zastavico -depth z ukazom clone, Git privzeto prevzame zastavico -single-branch. Lahko pa uporabite zastavico -no-single-branch, da Gitu naročite, naj pridobi zgodovine iz določene globine vsake veje.

Tu so veje Django brez možnosti -no-single-branch (globina 1):

$ git podružnica -a
* mojster
daljinski upravljalci / izvor / HEAD -> izvor / glavni
oddaljeni / izvor / glavni

Prisotna je samo glavna veja.

Tu so veje Django po uporabi možnosti -no-single-branch:

$ git clone --depth 1 --no-single-branch https: // github.com / django / django.git
Kloniranje v "django" ..
daljinsko: Štetje predmetov: 95072, končano.
daljinsko: Stiskanje predmetov: 100% (42524/42524), končano.
daljinsko: Skupaj 95072 (delta 52343), ponovno uporabljeno 82284 (delta 42389), ponovno uporabljeno 0
Sprejem predmetov: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, končano.
Razreševanje delt: 100% (52343/52343), končano.
Preverjanje povezanosti ... končano.
Preverjanje datotek: 100% (5860/5860), končano.
$ du -sh django
124M django

Upoštevajte, čeprav je globina še vedno 1, je velikost klona 124M namesto 55M za prejšnji primer.
Če preverimo veje, bi na tem klonu videli veliko več vej:

$ cd django
$ git podružnica -a
* mojster
daljinski upravljalci / izvor / HEAD -> izvor / glavni
daljinski upravljalci / izvor / podstrešje / balvan-oracle-sprint
daljinski upravljalci / izvor / podstrešje / celotna zgodovina
daljinski upravljalci / izvor / podstrešje / generična-avt
daljinski upravljalci / izvor / podstrešje / gis
daljinski upravljalci / izvor / podstrešje / i18n
daljinski upravljalci / izvor / podstrešje / magično odstranjevanje
daljinski upravljalci / izvor / podstrešje / večkratna prijava
daljinski upravljalci / izvor / podstrešje / podpora za več db
daljinski upravljalci / izvor / podstrešje / novi-admin
oddaljeni / izvor / podstrešje / newforms-admin
oddaljeni / izvor / podstrešje / dovoljenja na objekt
oddaljeni / izvor / podstrešje / poizvedba-refactor
daljinski upravljalci / izvor / podstrešje / razvoj sheme
oddaljeni / izvor / podstrešje / schema-evolution-ng
oddaljeni / izvor / podstrešje / iskanje-api
oddaljeni / izvor / podstrešje / sqlalchemy
daljinski upravljalci / izvor / podstrešje / unicode
oddaljeni / izvor / glavni
remotes / origin / soc2009 / admin-ui
remotes / origin / soc2009 / http-wsgi-izboljšave
remotes / origin / soc2009 / i18n-izboljšave
remotes / origin / soc2009 / validacija modela
oddaljeni / izvor / soc2009 / multidb
remotes / origin / soc2009 / test-izboljšave
remotes / origin / soc2010 / app-loading
remotes / origin / soc2010 / query-refactor
remotes / origin / soc2010 / test-refactor
daljinski upravljalci / izvor / stabilno / 0.90.x
daljinski upravljalci / izvor / stabilno / 0.91.x
daljinski upravljalci / izvor / stabilno / 0.95.x
daljinski upravljalci / izvor / stabilno / 0.96.x
daljinski upravljalci / izvor / hlev / 1.0.x
daljinski upravljalci / izvor / hlev / 1.1.x
daljinski upravljalci / izvor / hlev / 1.10.x
daljinski upravljalci / izvor / hlev / 1.11.x
daljinski upravljalci / izvor / hlev / 1.2.x
daljinski upravljalci / izvor / hlev / 1.3.x
daljinski upravljalci / izvor / hlev / 1.4.x
daljinski upravljalci / izvor / hlev / 1.5.x
daljinski upravljalci / izvor / hlev / 1.6.x
daljinski upravljalci / izvor / hlev / 1.7.x
daljinski upravljalci / izvor / hlev / 1.8.x
daljinski upravljalci / izvor / hlev / 1.9.x
daljinski upravljalci / izvor / hlev / 2.0.x

Povzetek

Plitki klon Git vam lahko pomaga prihraniti čas in prostor na trdem disku. Vendar ima svojo ceno. Če redno potiskate kodo v oddaljene repozitorije, se bo čas zapisov podaljšal. Za redne delovne postopke se je torej dobro izogniti plitvim klonom.

Reference:

Namestite najnovejšo strategijo igre OpenRA v Ubuntu Linux
OpenRA je Libre / Free Real Time strateški stroj, ki poustvarja zgodnje igre Westwood, kot je klasična Command & Conquer: Red Alert. Porazdeljeni modi...
Namestite najnovejši Dolphin Emulator za Gamecube & Wii v Linux
Dolphin Emulator vam omogoča igranje izbranih iger Gamecube in Wii na osebnih računalnikih Linux (PC). Dolphin Emulator je prosto dostopen in odprtok...
Kako uporabljati GameConqueror Cheat Engine v Linuxu
Članek zajema vodnik o uporabi varalnice GameConqueror v Linuxu. Številni uporabniki, ki igrajo igre v sistemu Windows, pogosto uporabljajo aplikacijo...