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.gitKló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.gitKló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 - online7fa451f 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:
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 - online7fa451f 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 / _exampleKló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 - online7fa451f 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.gitKló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:
$ 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:
- git-klónok-vs-sekély-git-klónok /
- közösség.atlassian.com => klón-mélység-mit-miért-miért-érdekel-e-ez a beállítás /
- git-scm.com / docs / git-clone
- jenkins.io => nagy-git-repók.pdf
- közepes.com / @ wdyluis => git-gc-and-git-sekély klón
- stackoverflow.com => git-clone-by-default-sekély-vagy-nem
- unix.veremcsere.com => linux-kernel-source-code-size-eltérés
- atlassian.com => kezelni-nagy-tárolók-git
- szükségképpen.com => git-túl-alapok-sekély klónok használata