Care sunt cele trei copaci în Git?

Git a devenit cel mai utilizat sistem pentru controlul versiunilor și partajarea codului. Dacă doriți să contribuiți la crearea de software open source sau dacă doriți să lucrați la o echipă profesionistă, înțelegerea Git este o necesitate.

Într-o serie de cursuri Git pe Envato Tuts +, am explicat câteva din conceptele Git de bază, toate ilustrate cu animații utile.

În acest videoclip, veți afla despre cei trei copaci: HEAD, indexul și directorul de lucru. Uita-te la cum îmi explic rolul fiecăruia și cum interacționează în timp ce actualizați și comiteți codul.

Git de bază: cele trei copaci

 

Care sunt cele trei copaci?

Pentru a înțelege mai bine modul în care funcționează Git, putem folosi metafora celor trei copaci. Acești arbori sunt colecții diferite de fișiere. 

Pentru fluxul de lucru al adăugării și preluării comitetelor, Git utilizează trei versiuni diferite ale fișierelor:

  1. directorul de lucru
  2. indicele
  3. ceva numit "HEAD" pentru crearea și recuperarea comitetelor

Fiecare dintre acești copaci are o funcție diferită: un copac pentru a scrie modificări, un copac pentru a le pune în scenă și unul pentru a vă indica ultimul angajament pe o ramură în reputația dvs. Git. 

Versiuni diferite ale fișierelor

Fișiere ale căror conținut pot fi modificate se află în directorul dvs. de lucru. Fișierele plasate în indexul dvs. se pregătesc să fie ambalate într-un obiect de comitere. Aceste comitete sunt salvate în depozitul dvs. Git. 

Fișierele care au fost deja angajate sunt fișiere comprimate. Acestea sunt rulate printr-o funcție SHA-1, o funcție hash criptografică. Ambele versiuni de fișiere din index și comiterea ei înșiși sunt salvate în replica Git, care este pur și simplu o replică .git la nivelul rădăcinii foliei.

Directorul de lucru reprezintă fișierele reale din sistemul de fișiere ale computerului, care sunt disponibile editorului de cod pentru a aplica modificări. Directorul de lucru este o versiune a unui comitet special, un instantaneu particular al unui proiect pe care l-ați verificat. Este versiunea istoriei Git pe care o arată HEAD, la un moment dat.

"Verificat" înseamnă că aveți versiunile decomprimate ale fișierelor extrase din depozitul Git, disponibile pentru editare. Indicele reprezintă ceea ce este urmărit. De asemenea, ați putea spune că este vorba de o listă a tuturor fișierelor relevante pentru depozitul dvs. Git. 

Indicele merge cu câteva nume. Când oamenii vorbesc despre zona de așteptare, fișierele în scenă, memoria cache sau directorul de cache, toți vorbeau despre index. Puteți vedea indexul ca zonă de proiectare pentru următorul comitet, o zonă temporară pentru a pregăti următorul angajament. 

CAP

HEAD este partea din git care indică ramurile dvs., ca ramura principală în mod implicit. Este o referință și are o treabă destul de simplă, dar foarte importantă. HEAD indică ramura curentă verificată și care, la rândul său, indică ultimul angajament din acea ramură. HEAD se poate deplasa nu numai în timp (când verificați comitetele anterioare), dar se mișcă, de asemenea, atunci când creați sucursale noi sau pur și simplu treceți la alte sucursale.

De asemenea, este punctul din istoria dvs. Git pe care vă puteți plasa următoarea comitet la dvs., părintele pentru următorul comitet. Cu fiecare comitere nouă, înlocuiește referința la sucursala curentă selectată în mod prestabilit, filiala principală, desigur. 

Deci, în realitate, HEAD este o referință care se schimbă frecvent și indică două lucruri: sucursala însăși, și prin aceasta, ultimul angajament pe acea ramură. 

Fluxul de lucru al fișierelor Git 

Să aruncăm o privire mai atentă la fluxul de lucru al fișierelor din Git. Este esențial să înțelegeți cum se potrivesc toate aceste piese împreună. Veți avea mult mai ușor să înțelegeți mai multe funcții și concepte avansate în Git după aceea.

Iată un exemplu:

În acest exemplu, am făcut două versiuni ale fișierului nostru. Și puteți vedea că versiunile din repo, index și directorul de lucru sunt una și aceeași. Deoarece aceste fișiere sunt deja urmărite, Git va observa diferențe atunci când schimbați oricare dintre aceste fișiere urmărite în directorul de lucru.

Când rulați git status comanda, veți vedea o listă de fișiere care au fost schimbate, colorate în roșu. Acest lucru indică faptul că aveți diferențe între directorul dvs. de lucru, reprezentat de codul din editorul de cod și indexul dvs., care reprezintă versiuni ale fișierelor dintr-un anumit comitet, cel mai frecvent ultimul comitet.

Puteți rula acum adăugați git comanda pentru a pune aceste modificări din directorul de lucru în indexul în care ați pus în scenă fișierele. git status va afișa apoi fișierele adăugate la indexul colorat în verde. Aceasta înseamnă că modificările dvs. sunt gata să fie împachetate într-o nouă comitet, pe care HEAD poate să o îndrepte și să o dezvolte.

O listă verde de fișiere înseamnă pur și simplu că versiunile fișierelor în scenă din index sunt diferite de versiunile de fișiere deja angajate anterior. Când alergi git comite, aceste fișiere staged vor fi puse într-un obiect nou de comitere. git comite comandă va salva numele unui fișier, conținutul fiecărui fișier, informațiile despre autor, metadatele și altele asemenea într-un obiect nou.

Acest obiect de comitet, care acum trăiește într-o .git director în repo, va fi noua referință la care se îndreaptă HEAD. Revenind la angajamentele anterioare, este un vârf al aisbergului într-un fel. După ce am creat obiectul de comitere, suntem din nou la începutul ciclului.

Comitetul pe care HEAD indică în repo se potrivește din nou versiunilor din index și din directorul de lucru, care este pregătit pentru ca schimbările noi să fie puse în scenă și angajate. Sfarsitul povestii.

Urmăriți mai multe cursuri Git

Dacă ați găsit acest lucru util, de ce nu verificați mai multe cursuri Git?

Ai putea viziona introducerea noastră în Git și GitHub sau încerca celelalte cursuri de cafea în această serie:

  • Git de bază: Resetați
  • Git Basics: Cererile GitHub Pull
  • Git de bază: filiale
  • Git de bază: Statele
  • Git de bază: Merge și Rebase
Cod