Diferență între revizuiri ale paginii „PC Laborator 2.1 (opțional)”

De la WikiLabs
Jump to navigationJump to search
Linia 43: Linia 43:
 
[[Fișier:git_commit_stack.svg]]
 
[[Fișier:git_commit_stack.svg]]
  
 +
Ultimul ''commit'' se numește HEAD. Orice nou commit se poate pune doar peste HEAD-ul curent și va deveni noul HEAD. Dacă se dorește revenirea la un commit anterior, acest lucru se poate face în două feluri, specificând ID-ul commit-ului la care se dorește revenirea:
 +
* revenire fără pierderea modificărilor ulterioare; în acest caz, starea devine ''detached'';
 +
* revenire cu ștergerea completă a modificărilor ulterioare.
  
 +
În '''detached state''' nu se șterge nimic din repository, dar nici nu se pot face ''commit''-uri noi (țineți minte că un ''commit'' nu se poate pune decât peste HEAD).
  
  

Versiunea de la data 27 septembrie 2015 15:15

Obiective

  • definirea noțiunii de Version Control System;
  • utilizarea unui sistem de Version Control: Git.

Sistem de control al versiunii

Gândiți-vă la următorul scenariu: lucrați la un proiect într-un limbaj de programare sau de descriere hardware; acest proiect este mare și nu poate fi terminat într-o zi, prin urmare vă faceți timp și lucrați cate o oră în fiecare zi. Apar următoarele situații:

  • peste două săptămâni vă dați seama că unele lucruri pe care le-ați adăugat în program nu sunt necesare, deci ați vrea să vă întoarceți la o versiune mai veche - este nevoie de un sistem care să țină o istorie a modificărilor și să permită oricând întoarcerea la o versiune anterioară;
  • proiectul e pe echipe, deci la el lucrează trei persoane; fiecare editează unul sau mai multe fișiere, fiind posibil ca doi membri ai echipei să editeze același fișier - e nevoie de un sistem care să poată să centralizeze modificările și să trateze situația în care același fișier e modificat de doi ingineri;
  • unul din membrii echipei găsește o problemă și dorește să vadă cine și ce a modificat în zona respectivă de cod și care a fost scopul modificării - este deci nevoie de un sistem care să permită documentarea fiecărei modificări pe perioada dezvoltării proiectului și vizualizarea acestor modificări;
  • după documentare, teser-ul dorește să poată nota problema, atribuid-o unui membru al echipei pentru rezolvare - este nevoie de un sistem care să permită înregistrarea și documentarea erorilor în scopul rezolvării;

Toate aceste cerințe sunt adresate de sistemele de control al versiunii, acestea pot:

  • ține evidența modificărilor și permite întoarcerea la o versiune mai veche;
  • permite ramificarea dezvoltării în mai multe direcții și unificarea ulterioară a acestor ramuri;
  • sincroniza modificările fiecărui utilizator cu un depozit central pentru a putea fi accesate de ceilalți membri ai proiectului;

Există mai multe sisteme de control al versiunii:

  • Pe model client - server:
    • Concurrent Versions System (CVS) - open Source
    • Subversion (SVN) - open source
    • Perforce – nu este open source, dar poate fi folosit gratis în proiecte open-source
  • Pe model distribuit:
    • Git - creat de Linus Torvalds pentru dezvoltarea kernel-ului de Linux - open source
    • BitKeeper – folosit pentru dezvoltarea kernel-ului de Linux între 2002 și aprilie 2005.

În continuare vom prezenta conceptele cele mai importante și funcționarea sistemului Git.

Git

Git este un sistem de control de versiune distribuit. Asta înseamnă că poate fi folosit de către un utilizator fără a fi conectat la un depozit central, copia locală de pe calculatorul utilizatorului ținând în baza ei de date toate informațiile legate de conținutul curent și de modificările anterioare.

Git - repository local

Fiecare proiect este stocat în Git într-un "depozit" numit repository. Odată un repository creat, se pot adăuga apoi șterge sau modifica fișiere. Aceste modificări se adaugă în repository prin operații specifice inițiate de utilizator, numite commit. Fiecare nou commit, care poate conține modificări pentru unul sau mai multe fișiere, se adaugă întotdeauna peste ultimul commit, și conține informații despre:

  • utilizatorul care făcut modificările;
  • data și ora când s-au realizat modificările respective;
  • mesajul adăugat de utilizator în momentul commit-ului;
  • un număr de identificare, generat din celelalte informații;
  • modificările efective.

Git commit stack.svg

Ultimul commit se numește HEAD. Orice nou commit se poate pune doar peste HEAD-ul curent și va deveni noul HEAD. Dacă se dorește revenirea la un commit anterior, acest lucru se poate face în două feluri, specificând ID-ul commit-ului la care se dorește revenirea:

  • revenire fără pierderea modificărilor ulterioare; în acest caz, starea devine detached;
  • revenire cu ștergerea completă a modificărilor ulterioare.

În detached state nu se șterge nimic din repository, dar nici nu se pot face commit-uri noi (țineți minte că un commit nu se poate pune decât peste HEAD).



Un repository nou este inițializat cu comanda init: