Git - ce ramură

Ce este o ramură?

Pentru a înțelege cu adevărat cum funcționează Git cu ramuri, trebuie să luăm un pas înapoi și să examineze modul în care Git stochează datele sale. După cum vă amintiți de la capitolul 1, Git nu stochează date ca o succesiune de modificări, sau delte, precum și o serie de instantanee (instantaneu).

Pentru claritate, să presupunem că aveți un director care conține trei fișiere, și doriți să le adăugați la index și poate comite. Atunci când fișierele sunt adăugate la indexul pentru fiecare dintre ele calcula suma de control (hash SHA-1, pe care am menționat în capitolul 1), atunci versiunea fișierului va fi salvat în Git-magaziei (Git se referă la ele ca date binare), precum și a acestora checksum se adaugă la index:

Când creați commit face git commit. checksum GIT fiecare subdirector (în acest caz, numai directorul rădăcină) și stochează aceste obiecte copaci în Git-magaziei. Git creează apoi un obiect comite, care are metadate și un pointer la arborele obiect la rădăcina proiectului. Astfel, Git va fi capabil să recreeze starea actuală atunci când este nevoie.

Dvs. GIT-magaziei contine acum cinci obiecte: o pată de cerneală pentru conținutul fiecăruia dintre cele trei dosare, un copac care listează conținutul directorului și de a determina numele și blobs fișierul corespunzător, și comite cu indicatorul la același copac obiect la rădăcină, și cu toate metadatele comite. Schematic, datele din acest Git-depozit apar așa cum se arată în Figura 3-1.

Git - ce ramură

Figura 3-1. depozit de date cu un singur comite.

Dacă face unele modificări și de a crea un nou comite, următoarea comite salvează un pointer la care a mers direct savirsi la el. După următoarele două istoria comiterile ar putea arata ceva de genul figura 3-2.

Git - ce ramură

Figura 3-2. Git'a obiect de date pentru mai multe commit.

Filiala din Git'e - este doar un pointer mobil ușor la una dintre aceste commit. sucursală implicit în Git'e numit maestru. Când creați comiterile la etapa inițială, vi se maestru ramură. puncte la ultima comitere făcut. Cu fiecare nou comite se deplasează înainte în mod automat.

Git - ce ramură

Figura 3-3. puncte de ramificare la istoria. comiterile

Ce se întâmplă dacă creați o nouă ramură? Deci, acest lucru va crea un nou index, care poate fi mutat. De exemplu, creați o nouă ramură numită testare. Acest lucru se face prin intermediul sucursalei comanda git:

Această comandă creează un nou indicator la fel se angajeze, unde vă aflați acum (vezi. Fig. 3-4).

Git - ce ramură

Figura 3-4. ramuri multiple indică spre istoria. comiterile

În cazul în care nu știe ce ramură Git ești în prezent? Se păstrează un indicator special numit HEAD (vârful). Rețineți că acest lucru este diferit de conceptul HEAD în altă valută străină, cum ar fi Subversion sau CVS, care s-ar putea sa se obisnuiasca. În Git'e este un pointer la filiala locală ești. În momentul de față, ești încă pe maestru ramură. Comanda filiala Git a creat doar o nouă sucursală, aceasta nu te trece pe ea (vezi. fig. 3-5).

Git - ce ramură

Figura 3-5. puncte de fișier cap la ramura curentă.

Pentru a comuta la o ramură existentă, aveți nevoie pentru a executa git checkout. Să trecem la o nouă încercare de ramură:

Această acțiune se va deplasa capul astfel încât să indice ramura de testare (vezi. Fig. 3-6).

Git - ce ramură

Figura 3-6. HEAD indică o altă ramură atunci când comutare sucursale.

Care este semnificația acestei? Să facem un alt comite:

Figura 3-7 prezintă rezultatul.

Git - ce ramură

Figura 3-7. Ramura, ceea ce indică faptul HEAD, se deplasează înainte cu fiecare comite.

Este interesant, pentru că acum filiala de testare a progresat, dar ramura de master încă la comitere ai fost când ai fugit checkout git. pentru a comuta ramuri. Să ne întoarcem la ramura de master:

În Figura 3-8, puteți vedea rezultatul.

Git - ce ramură

Figura 3-8. HEAD se mută la o altă ramură la checkout'e.

Această comandă a făcut două lucruri. Acesta a mutat înapoi la indicatorul HEAD master, și sa întors fișierele din directorul de lucru înapoi o sucursală, în conformitate cu starea unei imagini, ceea ce indică maestrul. De asemenea, înseamnă că modificările pe care le fac din acest punct înainte se va abate de la o versiune mai veche a proiectului. Este, de fapt, role înapoi modificările pe care le aveți timp pentru a face o testare ramură. astfel încât să poată continua să se deplaseze într-o altă direcție.

Să din nou vnesom câteva modificări și să facă o comite:

Acum, povestea proiectului dumneavoastră ramificat afară (vezi. Fig. 3-9). Ați creat o nouă ramură, ne-am mutat pe el, a lucrat pe ea un pic, muta înapoi la ramura principală și a făcut alte lucrări. Ambele aceste schimbări sunt izolate în ramuri separate: puteți comuta înainte și înapoi între ramurile și îmbinați-le atunci când sunteți gata. Și toate acestea a fost făcut cu comenzi simple și checkout ramură.

Git - ce ramură

Figura 3-9. Povestea ramurilor divergente.

Datorită faptului că filiala din Git'e de fapt un simplu fișier care conține 40 de caractere de control SHA-1 al commit îl indică, de a crea sau șterge ramuri sunt ieftine. Crearea unei noi ramuri este la fel de rapid și simplu ca scris 41 de octeți din fișier (40 de caractere și o linie nouă).

Acest lucru este foarte diferit de modul de ramificare se face în cele mai multe LES. Acolo copiază toate fișierele de proiect la un alt director. Aceasta poate dura câteva secunde sau chiar minute, în funcție de dimensiunea proiectului, în timp ce Git'e întotdeauna se întâmplă instantaneu. De asemenea, datorită faptului că ne amintim strămoșii să se angajeze, găsirea unei baze corespunzătoare de îmbinare pentru îmbinarea se face în mod automat pentru noi, și, în general, fuziunea se face cu ușurință. Aceste caracteristici ajuta să încurajeze dezvoltatorii să creeze și să utilizeze ramuri.

Să se vor înțelege, de ce ar trebui să facă acest lucru.