Git

Git plitki klon i dubina klona

Git plitki klon i dubina klona

Razumijevanje Git plitkog klona i dubine klona

Git je distribuirani sustav kontrole verzija. To je jedna od prednosti korištenja Gita. Ne morate ovisiti o središnjem poslužitelju ili spremištu da biste radili lokalno. Sve što vam treba u vezi povijesti vaših modula nalazi se na dohvat ruke. Međutim, to može postati problem kada imate posla s spremištima s velikim binarnim datotekama ili spremištima koja imaju dugu povijest. Pogotovo ako imate situaciju da ga svaki put trebate svježe preuzeti, poput poslužitelja za izgradnju, tada veličina i vrijeme preuzimanja mogu postati problem.

Gitovo rješenje problema je plitki klon gdje možete koristiti dubinu klona kako biste definirali koliko duboko vaš klon treba ići. Na primjer, ako koristite -depth 1, tada će tijekom kloniranja Git dobiti samo najnoviju kopiju relevantnih datoteka. Možete vam uštedjeti puno prostora i vremena.

Git plitki klon i veličina

Pogledajmo popularno Git spremište za Django. Ako u potpunosti klonirate repo, dobit ćete sljedeće:

$ git klon https: // github.com / django / django.git
Kloniranje u 'django' ..
daljinski: Brojanje predmeta: 409053, gotovo.
daljinski: Komprimiranje predmeta: 100% (26/26), gotovo.
daljinski: Ukupno 409053 (delta 6), ponovno upotrijebljeno 8 (delta 1), pakirano ponovno korišteno 409026
Primanje predmeta: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, gotovo.
Rješavanje delta: 100% (297045/297045), gotovo.
Provjera povezanosti ... gotovo.
Provjera datoteka: 100% (5860/5860), gotovo.

Ako provjerite veličinu lokalne kopije, to je:

$ du -sh django /
225M django /

Nabavimo isto Django spremište s plitkim klonom:

$ git clone --depth 1 https: // github.com / django / django.git
Kloniranje u 'django' ..
daljinski: Brojanje predmeta: 8091, gotovo.
daljinski: Komprimiranje predmeta: 100% (4995/4995), gotovo.
daljinski: Ukupno 8091 (delta 2036), ponovno upotrijebljeno 5507 (delta 1833), pakirano ponovno korišteno 0
Primanje predmeta: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, gotovo.
Rješavanje delta: 100% (2036/2036), gotovo.
Provjera povezanosti ... gotovo.
Provjera datoteka: 100% (5860/5860), gotovo.

Ako provjerite veličinu lokalne kopije, trebala bi biti znatno manja:

$ du -sh django /
55 milijuna django /

Kada se vaš poslužitelj bavi stotinama linija proizvoda, ova vrsta uštede prostora na tvrdom disku može biti korisna. U slučajevima projekata igara gdje postoje teške binarne datoteke, to može imati dramatičan učinak. Pomaže i kod dugogodišnjih projekata. Na primjer, potpuno kloniranje spremišta za Linux s GitHub-a više je od 7 GB, ali možete ga plitko klonirati za manje od 1 GB.

Git plitki klon i povijest

Plitko kloniranje možete lokalno provjeriti vlastitim spremištem. Stvorimo datoteku u našem lokalnom spremištu, izvršimo promjene i zabilježimo je 10 puta. A onda možemo klonirati spremište:

$ mkdir _primjer
$ cd _primjer
$ ls
$ git init
Inicijalizirano prazno Git spremište u / Users / zakh / git_repo / _example /.git /
$ echo x> velika_datoteka
$ git dodaj -A
$ git commit -m "Početno predavanje"
[master (root-commit) dd11686] Početno predavanje
1 datoteka promijenjena, 1 umetanje (+)
način stvaranja 100644 velika_datoteka
$ echo xx> velika_datoteka
$ git dodaj -A
$ git commit -m "Izmjena u large_file 1"
[master 9efa367] Izmjena u large_file 1
1 datoteka promijenjena, 1 umetanje (+), 1 brisanje (-)
..
..
$ mkdir test
$ cd test
$ git klon datoteka: //// Users / zakh / git_repo / _example
Kloniranje u '_primjer' ..
daljinski: Brojanje predmeta: 33, gotovo.
daljinski: Komprimiranje predmeta: 100% (22/22), gotovo.
daljinski: Ukupno 33 (delta 10), ponovno korišteno 0 (delta 0)
Primanje predmeta: 100% (33/33), 50.03 MiB | 42.10 MiB / s, gotovo.
Rješavanje delta: 100% (10/10), gotovo.
Provjera povezanosti ... gotovo.

U ovom smo primjeru stvorili _example git spremište u mapi / Users / zakh / git_repo / s jednom velikom_datotekom. Prikazana su samo prva dva predavanja. Tada stvaramo puni klon tog spremišta na drugom mjestu.

Zatim provjerimo povijest naših obveza:

$ git log --oneline
7fa451f Izmjena u large_file 10
648d8c9 Izmjena u large_file 9
772547a Izmjena u large_file 8
13dd9ab Izmjena u large_file 7
5e73b67 Izmjena u large_file 6
030a6e7 Izmjena u large_file 5
1d14922 Izmjena u large_file 4
bc0f2c2 Izmjena u large_file 3
2794f11 Izmjena u large_file 2
d4374fb Izmjena u large_file 1
924829d Prvo predavanje

Vidimo sve počinjene u punom klonu.
A sada izbrišimo trenutnu kopiju, a zatim plitki klon dubine 1:

$ git clone --depth 1 datoteka: //// Users / zakh / git_repo / _example
Kloniranje u '_primjer' ..
daljinski: Brojanje predmeta: 3, gotovo.
daljinski: Komprimiranje objekata: 100% (2/2), gotovo.
daljinski: Ukupno 3 (delta 0), ponovno korišteno 0 (delta 0)
Primanje predmeta: 100% (3/3), 50.02 MiB | 65.12 MiB / s, gotovo.
Provjera povezanosti ... gotovo.

Ako sada pogledamo povijest, vidimo samo posljednju povijest urezivanja:

$ git log --oneline
7fa451f Izmjena u large_file 10

Plitki klon dubine 3:

$ git clone --depth 3 datoteka: //// Users / zakh / git_repo / _example
Kloniranje u '_primjer' ..
daljinski: Brojanje predmeta: 9, gotovo.
daljinski: Komprimiranje predmeta: 100% (6/6), gotovo.
daljinski: Ukupno 9 (delta 2), ponovno korišteno 0 (delta 0)
Primanje predmeta: 100% (9/9), 50.02 MiB | 65.15 MiB / s, gotovo.
Rješavanje delta: 100% (2/2), gotovo.
Provjera povezanosti ... gotovo.

Sada vidimo još obveza:

$ git log --oneline
7fa451f Izmjena u large_file 10
648d8c9 Izmjena u large_file 9
772547a Izmjena u large_file 8

Problemi s Git plitkim klonom

Korisnici bi trebali razumjeti da ušteda na veličini i vremenu preuzimanja ovisi o organizaciji obveza. Mogu se značajno razlikovati od jednog do drugog spremišta. Dobro je testirati spremište plitkim klonom kako biste provjerili koliko će vam prostora na tvrdom disku i vremena preuzimanja uštedjeti.

Drugo je razmatranje da, iako možete gurnuti kôd iz plitkog klona, ​​možda će trebati više vremena zbog izračuna između udaljenog i lokalnog poslužitelja. Dakle, ako redovito predajete kod iz lokalne kopije, vjerojatno ima smisla koristiti puni klon.

Mogućnost višestrukog ogranka

Kada koristite -depth zastavicu s naredbom clone, Git po zadanom pretpostavlja zastavicu -single-branch. Ali možete upotrijebiti zastavicu -no-single-branch kako biste Gitu rekli da uzima povijesti s navedene dubine svake grane.

Evo Django grana bez opcije -no-single-branch (dubina 1):

$ git grana -a
* ovladati; majstorski
daljinski upravljači / podrijetlo / GLAVA -> podrijetlo / master
daljinski upravljači / podrijetlo / master

Prisutna je samo glavna grana.

Evo Django grana nakon upotrebe opcije -no-single-branch:

$ git clone --depth 1 --no-single-branch https: // github.com / django / django.git
Kloniranje u 'django' ..
daljinski: Brojanje predmeta: 95072, gotovo.
daljinski: Komprimiranje objekata: 100% (42524/42524), gotovo.
daljinski: Ukupno 95072 (delta 52343), ponovno upotrijebljeno 82284 (delta 42389), ponovno korišteno 0
Primanje predmeta: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, gotovo.
Rješavanje delta: 100% (52343/52343), gotovo.
Provjera povezanosti ... gotovo.
Provjera datoteka: 100% (5860/5860), gotovo.
$ du -sh django
124M django

Primijetite da iako je dubina još uvijek 1, veličina klona je 124M umjesto 55M za prethodni slučaj.
Ako provjerimo grane, na ovom ćemo klonu vidjeti puno više grana:

$ cd django
$ git grana -a
* ovladati; majstorski
daljinski upravljači / podrijetlo / GLAVA -> podrijetlo / master
daljinski upravljači / podrijetlo / potkrovlje / boulder-oracle-sprint
daljinski upravljači / podrijetlo / potkrovlje / puna povijest
daljinski upravljači / podrijetlo / potkrovlje / generički-aut
daljinski upravljači / podrijetlo / potkrovlje / gis
daljinski upravljači / podrijetlo / potkrovlje / i18n
daljinski upravljači / podrijetlo / potkrovlje / magično uklanjanje
daljinski upravljači / podrijetlo / potkrovlje / višestruka autorizacija
daljinski upravljači / podrijetlo / potkrovlje / multi-db-podrška
daljinski upravljači / podrijetlo / potkrovlje / novi-admin
daljinski upravljači / podrijetlo / potkrovlje / novi oblici-admin
daljinski upravljači / podrijetlo / potkrovlje / po dozvoli za objekt
daljinski upravljači / podrijetlo / potkrovlje / queryset-refactor
daljinski upravljači / podrijetlo / potkrovlje / shema-evolucija
daljinski / podrijetlo / potkrovlje / schema-evolution-ng
daljinski upravljači / podrijetlo / potkrovlje / search-api
daljinski / podrijetlo / potkrovlje / sqlalchemy
daljinski upravljači / podrijetlo / potkrovlje / unicode
daljinski upravljači / podrijetlo / master
remotes / origin / soc2009 / admin-ui
remotes / origin / soc2009 / http-wsgi-poboljšanja
remotes / origin / soc2009 / i18n-poboljšanja
remotes / origin / soc2009 / validacija modela
remotes / origin / soc2009 / multidb
remotes / origin / soc2009 / test-poboljšanja
remotes / origin / soc2010 / app-loading
remotes / origin / soc2010 / query-refactor
remotes / origin / soc2010 / test-refactor
daljinski upravljači / podrijetlo / stabilno / 0.90.x
daljinski upravljači / podrijetlo / stabilno / 0.91.x
daljinski upravljači / podrijetlo / stabilno / 0.95.x
daljinski upravljači / podrijetlo / stabilno / 0.96.x
daljinski upravljači / podrijetlo / stabilno / 1.0.x
daljinski upravljači / podrijetlo / stabilno / 1.1.x
daljinski upravljači / podrijetlo / stabilno / 1.10.x
daljinski upravljači / podrijetlo / stabilno / 1.11.x
daljinski upravljači / podrijetlo / stabilno / 1.2.x
daljinski upravljači / podrijetlo / stabilno / 1.3.x
daljinski upravljači / podrijetlo / stabilno / 1.4.x
daljinski upravljači / podrijetlo / stabilno / 1.5.x
daljinski upravljači / podrijetlo / stabilno / 1.6.x
daljinski upravljači / podrijetlo / stabilno / 1.7.x
daljinski upravljači / podrijetlo / stabilno / 1.8.x
daljinski upravljači / podrijetlo / stabilno / 1.9.x
daljinski upravljači / podrijetlo / stabilno / 2.0.x

Sažetak

Git plitki klon može vam pomoći uštedjeti vrijeme i prostor na tvrdom disku. Ali to ima svoju cijenu. Ako redovito gurate kôd u udaljena spremišta, to će povećati vrijeme urezivanja. Stoga je za redovite tijekove rada dobro izbjegavati plitke klonove.

Reference:

10 najboljih igara za igranje na Ubuntuu
Windows platforma bila je jedna od dominantnih platformi za igre zbog ogromnog postotka igara koje se danas razvijaju kako bi podržavale Windows. Može...
5 najboljih arkadnih igara za Linux
U današnje vrijeme računala su ozbiljni strojevi koji se koriste za igre na sreću. Ako ne uspijete dobiti novi visoki rezultat, znat ćete na što misli...
Bitka za Wesnoth 1.13.6 Razvoj objavljen
Bitka za Wesnoth 1.13.6 objavljeno prošlog mjeseca, šesto je razvojno izdanje u izdanju 1.13.x series i donosi niz poboljšanja, ponajviše korisničkog ...