What is Git?

Săptămâna Europeană a Programării (EU Code Week)

17 octombrie 2015, Bălți

Modalităţi ad-hoc de control al versiunilor

(C) Sursa imaginii: www.phdcomics.com

Modalități ad-hoc de control al versiunilor

Care ar fi unele dezavantaje ale acestei metode?

  • Pot apărea complicații privind integritatea: dacă am vrut să modific data_2010.05.28.dat, dar din greșeală am modificat și am salvat data_2010.05.27.dat.
  • Nu permite lucrul colaborativ la unul și același fișier: data_2010.05.27_radu.dat și data_2010.05.27_irina.dat (cum să integrez modificările acestor fișiere în unul singur?).

Modalități ad-hoc de control al versiunilor


   public int factorial(int n)
   {
     return n * factorial(n-1);
   }
 

Modalități ad-hoc de control al versiunilor


   public int factorial(int n)
   {
     if (n == 0)
       return 1;
     else
       return n * factorial(n-1);
   }
 

Modalități ad-hoc de control al versiunilor


   public int factorial(int n)
   {
     if (n == 0) //+RD20151017
       return 1; //+RD20151017
     else        //+RD20151017
       return n * factorial(n-1);
   }
 

Modalități ad-hoc de control al versiunilor


   public int factorial(int n)
   {
     //if (n == 0) //-RD20151018
     if (n <= 0)   //+RD20151018
       return 1;   //+RD20151017
     else          //+RD20151017
       return n * factorial(n-1);
   }
 

Modalități ad-hoc de control al versiunilor

Care ar fi unele dezavantaje ale acestei metode?

Controlul versiunilor cu Git

(C) Sursa imaginii: http://git-scm.com/book/en/v2/Getting-Started-Git-Basics#Snapshots,-Not-Differences

Git este un sistem distribuit...

(C) Sursa imaginii: http://thepilcrow.net/explaining-basic-concepts-git-and-github/

... și nu centralizat

(C) Sursa imaginii: http://thepilcrow.net/explaining-basic-concepts-git-and-github/

Foarte scurt istoric

Git îl are ca autor pe Linus Torvalds și a fost elaborat în 2005 cu scopul de a înlocui sistemul de control al versiunilor folosit până atunci la dezvoltarea nucleului Linux.

Articolul din Wikipedia despre nucleul Linux relatează că numărul de persoane implicate în dezvoltarea acestuia variază între 5000 și 6000, iar numărul de linii de cod a versiunii 3.10 în 2013 era 15,803,499.

Nu știu care a fost motivul exact al alegerii numelui, dar în slangul limbii engleze britanice „git” înseamnă „persoană neplăcută” („unpleasant person”).

Situri web care oferă Git

Instalare Git

Crearea unui proiect Git nou


  $ git init git-workshop
  $ cd git-workshop
sau

   $ mkdir git-workshop
   $ cd git-workshop
   $ git init
 
Formatul general:

  $ git init [dosar]

Puteți executa acestă comandă de câte ori doriți pe un proiect deja existent.

Crearea unui proiect Git nou

Nu uităm să specificăm autorul proiectului și ulterioarelor modificări:


      $ git config user.name "Numele dvs."
      $ git config user.email "posta@example.com"
      

Dosarul git, index-ul și dosarul de lucru

Toate versiunile proiectului sunt stocate în dosarul git (git dir).

Versiunea actuală a proiectului (nememorizată) se află în dosarul de lucru (work dir).

Versiunea care urmează să fie memorată se află în index (stage sau index).

O metaforă: dosarul de lucru este prezentul, dosarul git - trecutul, iar index-ul - este clipa între prezent și trecut.

Primul fișier în proiect


      $ touch README
      $ echo 'Primul proiect folosind Git' > README
      $ git status
      

Primul fișier în proiect


      $ git add README
      $ git status
      

Primul fișier în proiect


      $ git commit -m 'Adăugarea descrierii proiectului'
      $ git status
      

Primul fișier în proiect


      $ echo 'Autor: Radu D.' >> README
      $ git status
      

      $ git add README
      $ git commit -m 'Adăugarea numelui autorului'
      

Dosarul git, index-ul și dosarul de lucru

Git Dir Stage Work Dir
README

Dosarul git, index-ul și dosarul de lucru


după comanda git add README avem:



Git Dir Stage Work Dir
README README

Dosarul git, index-ul și dosarul de lucru


după comanda git commit -m avem:



Git Dir Stage Work Dir
README README README

O privire asupra istoriei proiectului

Vizualizarea tuturor versiunilor proiectului


      $ git log
      

sau


      $ git log --oneline
      

sau

      $ git log --oneline --name-only
      

O privire asupra istoriei proiectului

Vizualizarea conținutului fișierului dintr-o versiune


      $ git show <versiune>:README
      

Vizualizrea autorilor care au lucrat la un fișier per rând


      $ git blame README
      

Încărcăm proiectul pe GitHub

  1. Treceți pe pagina https://github.com/.
  2. Creați-vă un cont folosind butonul Sign up (colțul dreapta-sus).
  3. Creați un proiect nou cu numele git-workshop folosind butonul cu simbolul „+” apoi „New repository” (colțul dreapta-sus).

Încărcăm proiectul pe GitHub

  1. Reveniți în linia de comandă la proiectul local și
    
            $ git remote add origin https://github.com/<utilizator>/git-workshop.git
            $ git push -u origin master
            
  2. Treceți pe pagina https://github.com/<utilizator>/git-workshop și începeți să investigați posibilitățile interfeței sitului GitHub.

Ultimul exercițiu

  1. Treceți pe pagina https://github.com/vundicind/code-week.
  2. Preluați proiectul folosind butonul Fork (colțul dreapta-sus).
  3. Clonați proiectul local
    
            $ git clone https://github.com/<utilizator>/code-week.git
            
  4. Adăugați un comentariu despre atelier în fișierul feedback.html conform modelului.

Ultimul exercițiu

  1. Comiteți și încărcați modificările pe server
    
            $ git commit -a
            $ git push origin master
            
  2. Treceți înapoi pe GitHub și folosind butonul „Compare, review, create a pull request” (butonul verde din stânga denumirii selectorului de ramură) creați o cerere de integrare a schimbărilor în proiectul părinte (butonul „Create pull request”).

Ultimul exercițiu

Eu la rândul meu:
  1. voi accepta toate cererile
  2. și voi integra ramura master în ramura gh-pages pentru ca schimbările să fie vizibile pe http://vundicind.github.io/code-week

Vă mulțumesc!

Sper că va plăcut acest atelier și că plăcerea >= plăcerea pe care am avut-o pregătindu-mă de acest atelier.

Câteva legături către materiale elaborate de mine:

Alte materile în română: