Git

Git sekély klón és klón mélység

Git sekély klón és klón mélység

A Git sekély klón és a klón mélysége megértése

A Git egy elosztott verzióvezérlő rendszer. Ez a Git használatának egyik előnye. A helyi munkavégzéshez nem kell központi szervertől vagy tárhelytől függnie. Minden, ami a modulok előzményeivel kapcsolatos, kéznél van. Problémává válhat azonban, ha nagy bináris fájlokkal rendelkező vagy hosszú múltra visszatekintő tárakkal foglalkozik. Különösen, ha olyan helyzetben van, hogy minden alkalommal frissen kell letöltenie, például egy build szervert, akkor a méret és a letöltési idők problémát okozhatnak.

Git megoldása a problémára a sekély klón, ahol a klón mélységével meghatározhatja, hogy a klónnak milyen mélyre kell mennie. Például, ha a -depth 1 parancsot használja, akkor a klónozás során a Git csak a releváns fájlok legújabb példányát kapja meg. Ez rengeteg helyet és időt takaríthat meg Önnek.

Git sekély klón és méret

Vessünk egy pillantást a Django népszerű Git-tárára. Ha teljes mértékben klónozza a repót, a következőket kapja:

$ git klón https: // github.com / django / django.git
Klónozás a „django” -ba…
távoli: Objektumok számlálása: 409053, kész.
távirányító: Objektumok tömörítése: 100% (26/26), kész.
távoli: Összesen 409053 (delta 6), újrahasználva 8 (delta 1), csomagolásban újra felhasználva 409026
Fogadó objektumok: 100% (409053/409053), 167.77 MiB | 5.95 MiB / s, kész.
Delták feloldása: 100% (297045/297045), kész.
A kapcsolat ellenőrzése ... kész.
Fájlok ellenőrzése: 100% (5860/5860), kész.

Ha megnézi a helyi példány méretét, akkor:

$ du -sh django /
225M django /

Szerezzük be ugyanazt a Django-tárat egy sekély klónral:

$ git klón - 1. mélység https: // github.com / django / django.git
Klónozás a „django” -ba…
távoli: Objektumok számlálása: 8091, kész.
távirányító: Objektumok tömörítése: 100% (4995/4995), kész.
távoli: Összesen 8091 (delta 2036), újrafelhasználva 5507 (delta 1833), csomagolásban újra felhasználva 0
Objektumok fogadása: 100% (8091/8091), 8.82 MiB | 3.29 MiB / s, kész.
Delták megoldása: 100% (2036/2036), kész.
A kapcsolat ellenőrzése ... kész.
Fájlok ellenőrzése: 100% (5860/5860), kész.

Most, ha megnézi a helyi példány méretét, annak lényegesen kisebbnek kell lennie:

$ du -sh django /
55M django /

Amikor a szerver több száz termékcsaláddal foglalkozik, ez a fajta merevlemez-helymegtakarítás hasznos lehet. Olyan játékprojektek esetén, ahol nehéz bináris fájlok vannak, ennek drámai hatása lehet. Segít a régóta tartó projektekben is. Például a GitHub teljes klónozása a teljes Linux adattárban meghaladja a 7 GB-ot, de sekélyen klónozhatja 1 GB-nál kevesebbet.

Git sekély klón és történelem

Helyileg ellenőrizheti a sekély klónozást saját adattárával. Hozzunk létre egy fájlt a helyi adattárunkban, végezzünk módosításokat és végezzük el 10-szer. És akkor klónozhatjuk az adattárat:

$ mkdir _példa
$ cd _példa
$ ls
$ git init
Inicializált üres Git-adattár a / Users / zakh / git_repo / _example / könyvtárban.git /
$ echo x> nagy_fájl
$ git add -A
$ git elkötelezettség -m "Kezdeti elkötelezettség"
[master (root-comm) dd11686] Kezdeti elkötelezettség
1 fájl megváltozott, 1 beszúrás (+)
létrehozási mód 100644 nagy_fájl
$ echo xx> nagy_fájl
$ git add -A
$ git kötelezettség -m "Az 1. nagy fájl módosítása"
[master 9efa367] Az 1. nagy_fájl módosítása
1 fájl megváltozott, 1 beszúrás (+), 1 törlés (-)


$ mkdir teszt
$ cd teszt
$ git klónfájl: //// Users / zakh / git_repo / _example
Klónozás a „_example” kifejezésbe…
távirányító: Objektumok számlálása: 33, kész.
távirányító: Objektumok tömörítése: 100% (22/22), kész.
távoli: Összesen 33 (delta 10), újrafelhasználva 0 (delta 0)
Objektumok fogadása: 100% (33/33), 50.03 MiB | 42.10 MiB / s, kész.
Delták megoldása: 100% (10/10), kész.
A kapcsolat ellenőrzése ... kész.

Ebben a példában hoztuk létre a _example git adattárat a / Users / zakh / git_repo / mappában egyetlen nagy_fájlmal. Csak az első két végrehajtás jelenik meg. Ezután létrehozzuk a tároló teljes klónját egy másik helyen.

Ezután ellenőrizzük a történeteinket:

$ git log - online
7fa451f A nagy_fájl 10. módosítása
648d8c9 A 9. nagy fájl módosítása
772547a A nagy_fájl módosítása 8
13dd9ab A nagy_fájl módosítása 7
5e73b67 A 6. nagy fájl módosítása
030a6e7 Az 5. nagy fájl módosítása
1d14922 A 4. nagy fájl módosítása
bc0f2c2 A nagy_fájl módosítása 3
2794f11 2. nagy_fájl módosítása
d4374fb A nagy_fájl módosítása 1
924829d Kezdeti kötelezettségvállalás

Az összes elkövetést a teljes klónban látjuk.
Most töröljük az aktuális példányt, majd az 1 mélységű sekély klónt:

$ git klón - 1. mélység fájl: //// Users / zakh / git_repo / _example
Klónozás a „_example” kifejezésbe…
távirányító: Objektumok számlálása: 3, kész.
távirányító: Objektumok tömörítése: 100% (2/2), kész.
távoli: Összesen 3 (delta 0), újrafelhasználva 0 (delta 0)
Objektumok fogadása: 100% (3/3), 50.02 MiB | 65.12 MiB / s, kész.
A kapcsolat ellenőrzése ... kész.

Ha most megnézzük az előzményeket, akkor csak az utolsó elkövetési előzményeket látjuk:

$ git log - online
7fa451f A nagy_fájl 10. módosítása

Nézzünk sekély klónot 3 mélységgel:

$ git klón - 3. mélység fájl: //// Users / zakh / git_repo / _example
Klónozás a „_example” kifejezésbe…
távirányító: Objektumok számlálása: 9, kész.
távirányító: Objektumok tömörítése: 100% (6/6), kész.
távoli: Összesen 9 (delta 2), újrafelhasználva 0 (delta 0)
Tárgyak fogadása: 100% (9/9), 50.02 MiB | 65.15 MiB / s, kész.
Delták feloldása: 100% (2/2), kész.
A kapcsolat ellenőrzése ... kész.

Most újabb elkövetéseket látunk:

$ git log - online
7fa451f A nagy_fájl 10. módosítása
648d8c9 A 9. nagy fájl módosítása
772547a A nagy_fájl módosítása 8

A Git Shallow Clone problémái

A felhasználóknak meg kell érteniük, hogy a méret és a letöltési idő megtakarítás a vállalások szervezésétől függ. Jelentősen eltérhetnek az egyes tárolóktól. Célszerű egy sekély klón segítségével tesztelni az adattárat, hogy ellenőrizze, mennyi merevlemez-hely és letöltési idő takarít meg Önnek.

További szempont, hogy bár egy sekély klónból is lehet kódot tolni, a távoli és a helyi szerver közötti számítások miatt ez hosszabb időt vehet igénybe. Tehát, ha a kódot rendszeresen a helyi másolatból írja le, akkor valószínűleg van értelme egy teljes klón használatára.

Több fiók opció

Amikor a -depth zászlót klón paranccsal használja, akkor a Git alapértelmezés szerint az -single-branch zászlót veszi fel. De használhatja a -no-single-branch jelzőt, hogy megmondja Gitnek, hogy az egyes ágak meghatározott mélységéből nyerjen előzményeket.

Itt vannak a Django-ágak -no-single-branch opció nélkül (1. mélység):

$ git ág -a
* mester
távirányítók / origó / HEAD -> origó / master
távirányítók / eredet / mester

Csak a főág van jelen.

Itt vannak a Django-ágak a -no-single-branch opció használata után:

$ git klón - 1. mélység - nincs egyágú https: // github.com / django / django.git
Klónozás a „django” -ba…
távirányító: Objektumok számlálása: 95072, kész.
távirányító: Objektumok tömörítése: 100% (42524/42524), kész.
távoli: Összesen 95072 (delta 52343), újrahasználva 82284 (delta 42389), csomagolásban újra felhasználva 0
Fogadó objektumok: 100% (95072/95072), 74.69 MiB | 3.95 MiB / s, kész.
Delták feloldása: 100% (52343/52343), kész.
A kapcsolat ellenőrzése ... kész.
Fájlok ellenőrzése: 100% (5860/5860), kész.
$ du -sh django
124M django

Annak ellenére, hogy a mélység még mindig 1, a klón mérete 124M az előző eset 55M helyett.
Ha ellenőrizzük az ágakat, sokkal több ágat kell látnunk ezen a klónon:

$ cd django
$ git ág -a
* mester
távirányítók / origó / HEAD -> origó / master
távirányítók / origó / padlás / szikladarab-orákula-sprint
távirányítók / eredet / tetőtér / teljes történelem
távirányítók / origó / tetőtér / generic-auth
távirányítók / eredet / tetőtér / gis
távirányítók / origó / tetőtér / i18n
távirányítók / eredet / tetőtér / varázs-eltávolítás
távirányítók / eredet / tetőtér / több hitelesítés
távirányítók / origó / tetőtér / multiple-db-támogatás
távirányítók / origó / tetőtér / új-admin
távirányítók / origó / tetőtér / newforms-admin
távirányítók / origó / tetőtér / objektumonkénti engedélyek
távirányítók / origó / tetőtér / queryset-refaktor
távirányítók / origó / tetőtér / séma-evolúció
távirányítók / origó / tetőtér / séma-evolúció-ng
távirányítók / eredet / tetőtér / keresés-api
távirányítók / eredet / tetőtér / sqlalchemy
távirányítók / origó / tetőtér / unicode
távirányítók / eredet / mester
távirányítók / origin / soc2009 / admin-ui
távirányítók / origin / soc2009 / http-wsgi-improvement
távirányítók / origó / soc2009 / i18n-fejlesztések
távirányítók / origin / soc2009 / modell-validálás
távirányítók / origin / soc2009 / multidb
távirányítók / origin / soc2009 / teszt-fejlesztések
távirányítók / origin / soc2010 / app-loading
távirányítók / origin / soc2010 / query-refactor
távirányítók / origó / soc2010 / teszt-refaktor
távirányítók / origó / stabil / 0.90.x
távirányítók / origó / stabil / 0.91.x
távirányítók / origó / stabil / 0.95.x
távirányítók / origó / stabil / 0.96.x
távirányítók / origó / stabil / 1.0.x
távirányítók / origó / stabil / 1.1.x
távirányítók / origó / stabil / 1.10.x
távirányítók / origó / stabil / 1.11.x
távirányítók / origó / stabil / 1.2.x
távirányítók / origó / stabil / 1.3.x
távirányítók / origó / stabil / 1.4.x
távirányítók / origó / stabil / 1.5.x
távirányítók / origó / stabil / 1.6.x
távirányítók / origó / stabil / 1.7.x
távirányítók / origó / stabil / 1.8.x
távirányítók / origó / stabil / 1.9.x
távirányítók / origó / stabil / 2.0.x

Összegzés

A Git sekély klónja időt és merevlemez-helyet takaríthat meg. De ennek ára van. Ha rendszeresen tolja a kódot a távoli adattárakba, az megnöveli az elköteleződési időt. Tehát a rendszeres munkafolyamatokhoz érdemes elkerülni a sekély klónokat.

Referenciák:

Az Xdotool használata az egérkattintások és a billentyűleütések ösztönzéséhez Linux alatt
Az Xdotool egy ingyenes és nyílt forráskódú parancssori eszköz az egérkattintások és a billentyűleütések szimulálására. Ez a cikk egy rövid útmutatót ...
A top 5 ergonómikus számítógépes egértermék Linuxhoz
Hosszan tartó számítógép-használat okoz-e fájdalmat a csuklóján vagy az ujjain?? Merev ízületek szenvednek, és folyamatosan kezet kell rázniuk? Égő fá...
Az egér és az érintőpad beállításainak módosítása az Xinput használatával Linux alatt
A legtöbb Linux disztribúció alapértelmezés szerint „libinput” könyvtárral szállítja a rendszer bemeneti eseményeit. Feldolgozhatja a Wayland és az X ...