Git

Git lav klon og klondybde

Git lav klon og klondybde

Forståelse af Git Shallow Clone og Clone Depth

Git er et distribueret versionskontrolsystem. Det er en af ​​fordelene ved at bruge Git. Du behøver ikke være afhængig af en central server eller et lager for at arbejde lokalt. Alt hvad du behøver vedrørende din modulhistorie er lige ved hånden. Det kan dog blive et problem, når du har at gøre med opbevaringssteder med store binære filer eller opbevaringssteder, der har en lang historie. Især hvis du har en situation, hvor du skal downloade den frisk hver gang, som en build-server, så kan størrelse og downloadtider blive et problem.

Gits løsning på problemet er lav klon, hvor du kan bruge klonedybde til at definere, hvor dybt din klon skal gå. For eksempel, hvis du bruger -dypth 1, så får Git kun den seneste kopi af de relevante filer under kloning. Det kan spare dig for meget plads og tid.

Git lav klon og størrelse

Lad os se på det populære Git-arkiv til Django. Hvis du fuldt kloner repoen, får du følgende:

$ git klon https: // github.com / django / django.git
Kloning til 'django' ..
fjernbetjening: Tæller objekter: 409053, færdig.
fjernbetjening: Komprimering af objekter: 100% (26/26), færdig.
fjernbetjening: I alt 409053 (delta 6), genbrugt 8 (delta 1), genanvendt pakke 409026
Modtagende objekter: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, færdig.
Løsning af deltaer: 100% (297045/297045), færdig.
Kontrollerer tilslutningsmuligheder ... færdig.
Tjekning af filer: 100% (5860/5860), færdig.

Hvis du nu kontrollerer størrelsen på din lokale kopi, er det:

$ du -sh django /
225M django /

Lad os få det samme Django-lager med en lav klon:

$ git klon - dybde 1 https: // github.com / django / django.git
Kloning til 'django' ..
fjernbetjening: Tæller objekter: 8091, færdig.
fjernbetjening: Komprimering af objekter: 100% (4995/4995), færdig.
fjernbetjening: I alt 8091 (delta 2036), genbrugt 5507 (delta 1833), genbrugt pakke 0
Modtagende objekter: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, færdig.
Løsning af deltaer: 100% (2036/2036), færdig.
Kontrollerer tilslutningsmuligheder ... færdig.
Tjekning af filer: 100% (5860/5860), færdig.

Hvis du nu kontrollerer størrelsen på din lokale kopi, skal den være betydeligt mindre:

$ du -sh django /
55M django /

Når din server beskæftiger sig med hundredvis af produktlinjer, kan denne form for pladsbesparelse på harddisken være nyttig. I tilfælde af spilprojekter, hvor der er tunge binære filer, kan dette have en dramatisk effekt. Det hjælper også med langvarige projekter. For eksempel er den fulde Linux-repository-kloning fra GitHub mere end 7 GB, men du kan overfladisk klone den for mindre end 1 GB.

Git lav klon og historie

Du kan lokalt tjekke lav kloning med dit eget arkiv. Lad os oprette en fil i vores lokale lager, foretage ændringer og begå den 10 gange. Og så kan vi klone lageret:

$ mkdir _eksempel
$ cd _eksempel
$ ls
$ git init
Initialiseret tomt Git-lager i / Brugere / zakh / git_repo / _eksempel /.git /
$ echo x> large_file
$ git add -A
$ git commit -m "Initial commit"
[master (root-commit) dd11686] Initial commit
1 fil ændret, 1 indsættelse (+)
Opret tilstand 100644 large_file
$ echo xx> large_file
$ git add -A
$ git commit -m "Ændring til large_file 1"
[master 9efa367] Ændring til storfil 1
1 fil ændret, 1 indsættelse (+), 1 sletning (-)
..
..
$ mkdir test
$ cd test
$ git klonfil: //// Brugere / zakh / git_repo / _eksempel
Kloning til '_eksempel' ..
fjernbetjening: Tæller objekter: 33, færdig.
fjernbetjening: Komprimering af objekter: 100% (22/22), færdig.
fjernbetjening: I alt 33 (delta 10), genbrugt 0 (delta 0)
Modtagende objekter: 100% (33/33), 50.03 MiB | 42.10 MiB / s, færdig.
Løsning af deltaer: 100% (10/10), færdig.
Kontrollerer tilslutningsmuligheder ... færdig.

I dette eksempel har vi oprettet _eksempel git-arkiv i / Brugere / zakh / git_repo / mappen med en enkelt stor_fil. Kun de to første forpligtelser vises. Derefter opretter vi en fuld klon af dette lager på et andet sted.

Lad os derefter kontrollere historien om vores forpligtelser:

$ git log - online
7fa451f Ændring til storfil 10
648d8c9 Ændring til storfil 9
772547a Ændring til storfil 8
13dd9ab Ændring til storfil 7
5e73b67 Ændring til storfil 6
030a6e7 Ændring til storfil 5
1d14922 Ændring til storfil 4
bc0f2c2 Ændring til stor fil 3
2794f11 Ændring til storfil 2
d4374fb Ændring til storfil 1
924829d Første forpligtelse

Vi ser alle forpligtelserne i den fulde klon.
Lad os nu slette den aktuelle kopi og derefter en lav klon med en dybde på 1:

$ git klon - dybde 1 fil: //// Brugere / zakh / git_repo / _eksempel
Kloning til '_eksempel' ..
fjernbetjening: Tæller objekter: 3, færdig.
fjernbetjening: Komprimering af objekter: 100% (2/2), færdig.
fjernbetjening: I alt 3 (delta 0), genbrugt 0 (delta 0)
Modtagende objekter: 100% (3/3), 50.02 MiB | 65.12 MiB / s, færdig.
Kontrollerer tilslutningsmuligheder ... færdig.

Hvis vi ser på historien nu, ser vi kun den sidste begivenhedshistorik:

$ git log - online
7fa451f Ændring til storfil 10

Lad os lave klon med en dybde på 3:

$ git klon - dybde 3 fil: //// Brugere / zakh / git_repo / _eksempel
Kloning til '_eksempel' ..
fjernbetjening: Tæller objekter: 9, færdig.
fjernbetjening: Komprimering af objekter: 100% (6/6), færdig.
fjernbetjening: I alt 9 (delta 2), genbrugt 0 (delta 0)
Modtagende objekter: 100% (9/9), 50.02 MiB | 65.15 MiB / s, færdig.
Løsning af deltaer: 100% (2/2), færdig.
Kontrollerer tilslutningsmuligheder ... færdig.

Nu ser vi flere forpligtelser:

$ git log - online
7fa451f Ændring til storfil 10
648d8c9 Ændring til storfil 9
772547a Ændring til storfil 8

Problemer med Git Shallow Clone

Brugere bør forstå, at størrelsen og tidsbesparelsen for download afhænger af forpligtelsen. De kan variere markant fra et arkiv til et andet. Det er en god ide at teste lageret med en lav klon for at kontrollere, hvor meget harddiskplads og downloadtid det sparer dig.

En anden overvejelse er, at selvom du kan skubbe kode fra en lav klon, kan det tage længere tid på grund af beregningerne mellem fjernbetjeningen og den lokale server. Så hvis du begår kode regelmæssigt fra den lokale kopi, er det sandsynligvis fornuftigt at bruge en fuld klon.

Flere filialmuligheder

Når du bruger -depth-flag med klonkommando, antager Git som standard -single-branch-flag. Men du kan bruge -no-single-branch flag til at fortælle Git at hente historier fra den specificerede dybde af hver gren.

Her er Django-filialer uden -no-single-branch option (dybde 1):

$ git gren -a
* mester
fjernbetjeninger / oprindelse / HEAD -> oprindelse / master
fjernbetjeninger / oprindelse / master

Kun mestergrenen er til stede.

Her er Django-filialerne efter brug af -no-single-branch-indstillingen:

$ git klon - dybde 1 - ingen-gren https: // github.com / django / django.git
Kloning til 'django' ..
fjernbetjening: Tæller objekter: 95072, færdig.
fjernbetjening: Komprimering af objekter: 100% (42524/42524), færdig.
fjernbetjening: I alt 95072 (delta 52343), genbrugt 82284 (delta 42389), genbrugt pakke 0
Modtagende objekter: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, færdig.
Løsning af deltaer: 100% (52343/52343), færdig.
Kontrollerer tilslutningsmuligheder ... færdig.
Tjekning af filer: 100% (5860/5860), færdig.
$ du -sh django
124M django

Bemærk, selvom dybden stadig er 1, er klonens størrelse 124M i stedet for 55M for det foregående tilfælde.
Hvis vi kontrollerer grenene, skulle vi se mange flere grene på denne klon:

$ cd django
$ git gren -a
* mester
fjernbetjeninger / oprindelse / HEAD -> oprindelse / master
fjernbetjeninger / oprindelse / loft / kampesten-oracle-sprint
fjernbetjeninger / oprindelse / loft / fuld-historie
fjernbetjeninger / oprindelse / loftsrum / generisk godkendelse
fjernbetjeninger / oprindelse / loft / gis
fjernbetjeninger / oprindelse / loftsrum / i18n
fjernbetjeninger / oprindelse / loftsrum / magisk fjernelse
fjernbetjeninger / oprindelse / loftsrum / multi-godkendelse
fjernbetjeninger / oprindelse / loftsrum / multiple-db-support
fjernbetjeninger / oprindelse / loft / ny admin
fjernbetjeninger / oprindelse / loftsrum / newforms-admin
fjernbetjeninger / oprindelse / loftsrum / per objekt-tilladelse
fjernbetjeninger / oprindelse / loft / queryset-refactor
fjernbetjeninger / oprindelse / loft / skema-evolution
fjernbetjeninger / oprindelse / loft / skema-evolution-ng
fjernbetjeninger / oprindelse / loft / søg-api
fjernbetjeninger / oprindelse / loft / sqlalchemy
fjernbetjeninger / oprindelse / loftsrum / unicode
fjernbetjeninger / oprindelse / master
fjernbetjeninger / oprindelse / soc2009 / admin-ui
fjernbetjeninger / oprindelse / soc2009 / http-wsgi-forbedringer
fjernbetjeninger / oprindelse / soc2009 / i18n-forbedringer
fjernbetjeninger / oprindelse / soc2009 / modelvalidering
fjernbetjeninger / oprindelse / soc2009 / multidb
fjernbetjeninger / oprindelse / soc2009 / test-forbedringer
fjernbetjeninger / oprindelse / soc2010 / app-loading
fjernbetjeninger / oprindelse / soc2010 / query-refactor
fjernbetjeninger / oprindelse / soc2010 / test-refactor
fjernbetjeninger / oprindelse / stabil / 0.90.x
fjernbetjeninger / oprindelse / stabil / 0.91.x
fjernbetjeninger / oprindelse / stabil / 0.95.x
fjernbetjeninger / oprindelse / stabil / 0.96.x
fjernbetjeninger / oprindelse / stabil / 1.0.x
fjernbetjeninger / oprindelse / stabil / 1.1.x
fjernbetjeninger / oprindelse / stabil / 1.10.x
fjernbetjeninger / oprindelse / stabil / 1.11.x
fjernbetjeninger / oprindelse / stabil / 1.2.x
fjernbetjeninger / oprindelse / stabil / 1.3.x
fjernbetjeninger / oprindelse / stabil / 1.4.x
fjernbetjeninger / oprindelse / stabil / 1.5.x
fjernbetjeninger / oprindelse / stabil / 1.6.x
fjernbetjeninger / oprindelse / stabil / 1.7.x
fjernbetjeninger / oprindelse / stabil / 1.8.x
fjernbetjeninger / oprindelse / stabil / 1.9.x
fjernbetjeninger / oprindelse / stabil / 2.0.x

Resumé

Git overfladisk klon kan hjælpe dig med at spare tid og plads på harddisken. Men det har en pris. Hvis du regelmæssigt skubber kode til eksterne arkiver, vil det øge forpligtelsestiderne. Så for regelmæssige arbejdsgange er det en god ide at undgå lave kloner.

Referencer:

Mus Sådan vender du musens og touchpadsens rulle retning i Windows 10
Sådan vender du musens og touchpadsens rulle retning i Windows 10
Mus og Touchpads gør ikke kun computing let, men mere effektiv og mindre tidskrævende. Vi kan ikke forestille os et liv uden disse enheder, men det er...
Mus Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Musemarkøren og markøren i Windows 10 er meget vigtige aspekter af operativsystemet. Dette kan også siges om andre operativsystemer, så i sandhed er d...
Gratis og open source-spilmotorer til udvikling af Linux-spil
Denne artikel dækker en liste over gratis og open source-spilmotorer, der kan bruges til at udvikle 2D- og 3D-spil på Linux. Der er mange sådanne spil...