This shows you the differences between two versions of the page.
uso:laboratoare:ac:laborator-06:git-intro [2020/11/10 09:06] 127.0.0.1 external edit |
uso:laboratoare:ac:laborator-06:git-intro [2021/11/10 22:01] (current) andrei.tivga |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Introducere în Git și GitHub ====== | ====== Introducere în Git și GitHub ====== | ||
- | Vor fi cazuri când vom //strica// o versiune a codului și vom avea nevoie să revenim la o versiune corectă, caz în care un istoric de versiuni ne-ar fi de folos. Vom putea să lucrăm la un proiect de pe un alt sistem, în afară de al nostru, sau vom vrea să cerem feedback pe codul scris de noi. | + | [[http://www.github.com/|GitHub]] este o platformă online, pe care dezvoltatorii o pot folosi pentru a stoca și versiona codul lor sursă. **Git** este un sistem de management și versionare a codului sursă care permite lucrul eficient la un proiect software. |
- | Când vorbim despre un proiect software vrem să avem dezvoltatori, oameni care să lucreze împreună cu noi la proiect. Dezvoltatorii au nevoie de acces la codul sursă al proiectului software la care lucrăm. După ce le dăm acces, vrem ca fiecare dezvoltator să știe la ce a lucrat și la ce lucrează ceilalți; ca să nu se suprapună, ca să ajute și ca să ofere feedback. | + | Astfel, Git este utilitarul folosit în terminal, iar GitHub este serverul și aplicația web pe care rulează acesta, locul în care păstrăm repository-ul remote. |
- | Pentru a putea rezolva problemele de sincronizare între doi sau mai mulți colegi de echipă care lucrează la același proiect, ne ajută să avem un **sistem de versionare a codului**, adică să avem un istoric de modificări. Fiecare modificare înseamnă o nouă versiune a proiectului; avem astfel o listă de versiuni gestionată de sistemul de versionare a codului. Pe lângă rezolvarea problemelor de sincronizare, versionarea codului aduce și alte avantaje cum ar fi revenirea la o versiune mai veche a proiectului, găsirea rapidă a autorului unei secvențe de cod sau, pur și simplu, organizarea unui proiect. | + | Folosim Github pentru: |
- | **Git** este un sistem de management și versionare a codului sursă care permite lucrul eficient la un proiect software. | + | * Vor fi cazuri când vom //strica// o versiune a codului și vom avea nevoie să revenim la o versiune corectă, caz în care un istoric de versiuni ne-ar fi de folos. În caz contrar, va trebui să salvăm diferite versiuni a proiectului nostru că niște checkpoints pe PC-ul nostru, ocupând mult spațiu de depozitare. |
+ | * Vom putea să lucrăm la un proiect de pe un alt sistem, în afară de al nostru, sau vom vrea să cerem feedback pe codul scris de noi. | ||
- | [[http://www.github.com/|GitHub]] este o platformă online, bazată pe Git, pe care dezvoltatorii o pot folosi pentru a stoca și versiona codul lor sursă. Git este utilitarul folosit, iar GitHub este serverul și aplicația web pe care rulează acesta, locul în care păstrăm repository-ul remote. | + | * Când vorbim despre un proiect software vrem să avem dezvoltatori, oameni care să lucreze împreună cu noi la proiect. Dezvoltatorii au nevoie de acces la codul sursă al proiectului software la care lucrăm. După ce le dăm acces, vrem ca fiecare dezvoltator să știe la ce a lucrat și la ce lucrează ceilalți; ca să nu se suprapună, ca să ajute și ca să ofere feedback. |
- | + | ||
- | <note> | + | |
- | Similar cu GitHub există și alte platforme precum [[https://bitbucket.org|Bitbucket]] sau [[https://about.gitlab.com|GitLab]]. Comenzile pe care le vom studia se aplică pentru toate platformele care folosesc **Git**, doar interfața grafică diferă. | + | |
- | </note> | + | |
- | + | ||
- | În această carte vom folosi GitHub ca suport. În mare parte, acesta nu diferă foarte mult de alte platforme. | + | |
+ | * Pentru a putea rezolva problemele de sincronizare între doi sau mai mulți colegi de echipă care lucrează la același proiect, ne ajută să avem un **sistem de versionare a codului**, adică să avem un istoric de modificări. Fiecare modificare înseamnă o nouă versiune a proiectului; avem astfel o listă de versiuni gestionată de sistemul de versionare a codului. Pe lângă rezolvarea problemelor de sincronizare, versionarea codului aduce și alte avantaje cum ar fi revenirea la o versiune mai veche a proiectului, găsirea rapidă a autorului unei secvențe de cod sau, pur și simplu, organizarea unui proiect. | ||
===== Crearea unui cont pe GitHub (dacă nu aveți deja) ===== | ===== Crearea unui cont pe GitHub (dacă nu aveți deja) ===== | ||
Line 28: | Line 24: | ||
Introduceți un nume de utilizator (//username//), adresa voastră de e-mail și o parolă sigură pentru cont. Pentru validarea contului, accesați-vă căsuța de e-mail. Acolo veți găsi un e-mail în care vi se explică cum se poate valida noul cont creat. Verificați și căsuța **spam** în caz că nu ați primit nimic în inbox. | Introduceți un nume de utilizator (//username//), adresa voastră de e-mail și o parolă sigură pentru cont. Pentru validarea contului, accesați-vă căsuța de e-mail. Acolo veți găsi un e-mail în care vi se explică cum se poate valida noul cont creat. Verificați și căsuța **spam** în caz că nu ați primit nimic în inbox. | ||
- | <note> | + | ===== Crearea unui token de autentificare (dacă nu aveți deja) ===== |
- | **GitHub Student Pack** | + | |
- | GitHub oferă studenților numeroase beneficii care în mod normal sunt contra cost (plătite). Găsiți mai multe detalii pe [[https://education.github.com/pack|site-ul oficial]]. | + | Înainte să treceți la urmatoarele secțiuni, urmați pașii de mai jos: |
- | </note> | + | - Autentificați-vă pe GitHub. |
+ | - Mergeți pe [[https://github.com/settings/tokens|această pagină]]. Vom genera un token de autentificare pentru GitHub. | ||
+ | - Apăsați pe ''%%Generate new token%%'' și introduceți parola voastră de GitHub. | ||
+ | - La câmpul ''%%Note%%'' scrieți un nume pentru token, ca să știți pentru ce îl puteți folosi ulterior. Spre exemplu, puteți scrie ''%%uso-lab%%''. | ||
+ | - La câmpul ''%%Expiration%%'' selectați ''%%No expiration%%''. | ||
+ | - La câmpul ''%%Select scopes%%'' bifați ''%%repo Full control of private repositories%%'' (se vor selecta automat și căsuțele din lista lui ''%%repo%%''). | ||
+ | - Apăsați pe ''%%Generate token%%''. | ||
+ | - Veți vedea o căsuță verde cu un șir de caractere, salvați-l. **Acesta va fi folosit în loc de parolă atunci când vi se va cere parola în linia de comandă.** | ||
===== Pregătirea inițială a mediului Git ===== | ===== Pregătirea inițială a mediului Git ===== | ||
Line 48: | Line 50: | ||
student@uso:~$ git config --global user.email "lizababu@example.com" | student@uso:~$ git config --global user.email "lizababu@example.com" | ||
</code> | </code> | ||
+ | Această configurare trebuie făcută o singură dată pe PC / Virtual Machine. Pentru a verifica că setările s-au salvat, verificăm rulând acest lucru rulând ''%%git config --list%%''. | ||
+ | |||
+ | <note> | ||
+ | În următoarele secțiuni vom da doar comenzi pentru Git, așadar toate comenzile date sunt precedate de ''%%git%%''. | ||
+ | </note> | ||
===== Crearea primului repository ===== | ===== Crearea primului repository ===== | ||
- | Pentru a lucra la un proiect software, creăm un **repository software**. Vom crea unul pe GitHub, unul local, după care le vom interconecta. | + | Pentru a lucra la un proiect software, creăm un **repository software**. Un repository reprezintă o metodă de împărțire a proiectelor: poate fi o temă la o materie, poate conține chiar toate temele la o materie, în directoare diferite sau poate conține doar un simplu README.md; |
+ | |||
+ | Vom crea unul pe GitHub (numit de acum remote), unul local (la noi pe PC), după care le vom interconecta. | ||
<note> | <note> | ||
+ | |||
**Repository software** | **Repository software** | ||
Line 59: | Line 69: | ||
Repository-urile sunt de două tipuri: **locale** și **remote**. Acestea pot fi interconectate și să refere de fapt același proiect. Repository-ul local este cel pe care îl avem la noi pe calculator, pe când cel remote este unul stocat pe un server (în cazul nostru **GitHub**). Este doar o diferență de perspectivă între cele două, ele nu diferă din punct de vedere tehnic. De obicei, într-un proiect Git / GitHub există un repository central (remote) și mai multe repository-uri secundare (locale), câte unul pentru fiecare dezvoltator din echipa proiectului. | Repository-urile sunt de două tipuri: **locale** și **remote**. Acestea pot fi interconectate și să refere de fapt același proiect. Repository-ul local este cel pe care îl avem la noi pe calculator, pe când cel remote este unul stocat pe un server (în cazul nostru **GitHub**). Este doar o diferență de perspectivă între cele două, ele nu diferă din punct de vedere tehnic. De obicei, într-un proiect Git / GitHub există un repository central (remote) și mai multe repository-uri secundare (locale), câte unul pentru fiecare dezvoltator din echipa proiectului. | ||
- | Printre cele mai importante operații cu un repository sunt: **init**, **fork**, **clone**. Vom detalia aceste operații când le vom folosi în acest capitol. | + | Printre cele mai importante operații cu un repository sunt: **init**, **fork**, **clone**. |
</note> | </note> | ||
Line 68: | Line 79: | ||
{{:uso:laboratoare:laborator-04:GitHub-create-repo.gif?700}} | {{:uso:laboratoare:laborator-04:GitHub-create-repo.gif?700}} | ||
- | - Apăsăm pe săgeată din meniul din dreapta sus și vedem ceva similar cu imaginea de mai sus. | + | - Apăsăm pe săgeata din meniul din dreapta sus și vedem ceva similar cu imaginea de mai sus. |
- | - Apăsăm pe ''%%Your profile%%'' pentru a merge pe profilul nostru. Aici este locul în care vom putea vedea contribuțiile noastre pe GitHub. În partea de sus a ecranului vom vedea un meniu orizonatal care conține 4 opțiuni: ''%%Overview%%'', ''%%Repositories%%'', ''%%Projects%%'' și ''%%Packages%%''. | + | - Apăsăm pe ''%%Your profile%%'' pentru a merge pe profilul nostru. Aici este locul în care vom putea vedea contribuțiile noastre pe GitHub. În partea de sus a ecranului vom vedea un meniu orizontal care conține 4 opțiuni: ''%%Overview%%'', ''%%Repositories%%'', ''%%Projects%%'' și ''%%Packages%%''. |
- Apăsăm pe ''%%Repositories%%''. Acum vom vedea întreaga listă de repository-uri pe care le avem. Pentru a crea unul nou, apăsăm pe butonul verde din dreapta sus pe care scrie ''%%New%%''. | - Apăsăm pe ''%%Repositories%%''. Acum vom vedea întreaga listă de repository-uri pe care le avem. Pentru a crea unul nou, apăsăm pe butonul verde din dreapta sus pe care scrie ''%%New%%''. | ||
- | - Acum este momentul în care vom da un nume proiectului nostru, o descriere succintă a acestuia și vom putea decide dacă să fie **public** (vizibil tuturor utilizatorilor) sau **privat** (vizibil doar pentru noi și eventualii colaboratori ai proiectului). Ne va apărea un formular similar cu cel din imaginea de mai sus. Pentru acest tutorial vom crea un repository **public**. Este indicat ca numele repository-ului să descrie bine proiectul, în cazul nostru ''%%array-sorting-algorithms%%''. Descrierea proiectului este opțională, dar e recomandat să o adăugăm pentru a fi ușor de înțeles pentru cei care vor ajunge la proiectul nostru. | + | - Acum este momentul în care vom da un nume proiectului nostru, o descriere succintă a acestuia și vom putea decide dacă să fie **public** (vizibil tuturor utilizatorilor) sau **privat** (vizibil doar pentru noi și eventualii colaboratori ai proiectului). Ne va apărea un formular similar cu cel din imaginea de mai sus. Pentru acest tutorial vom crea un repository **public**). Este indicat ca numele repository-ului să descrie bine proiectul, în cazul nostru ''%%array-sorting-algorithms%%''. Descrierea proiectului este opțională, dar e recomandat să o adăugăm pentru a fi ușor de înțeles pentru cei care vor ajunge la proiectul nostru. |
- Apăsăm pe ''%%Create repository%%''. Vor apărea câteva instrucțiuni pentru crearea unui repository local nou și conectarea celui nou cu cel remote. Acest lucru este acoperit în secțiunile următoare. | - Apăsăm pe ''%%Create repository%%''. Vor apărea câteva instrucțiuni pentru crearea unui repository local nou și conectarea celui nou cu cel remote. Acest lucru este acoperit în secțiunile următoare. | ||
Line 97: | Line 108: | ||
<note> | <note> | ||
+ | |||
**Init** | **Init** | ||
Operația **init** este una locală și are rolul de a inițializa un repository gol, local. Inițializarea repository-ului local înseamnă crearea, în directorul ales, a mediului pentru a putea lucra la un proiect software versionat Git. Această operare duce la crearea unui director numit ''%%.git%%'' în care se vor ține ulterior date suplimentare despre repository, numite **metadatele** repository-ului. | Operația **init** este una locală și are rolul de a inițializa un repository gol, local. Inițializarea repository-ului local înseamnă crearea, în directorul ales, a mediului pentru a putea lucra la un proiect software versionat Git. Această operare duce la crearea unui director numit ''%%.git%%'' în care se vor ține ulterior date suplimentare despre repository, numite **metadatele** repository-ului. | ||
+ | |||
</note> | </note> | ||
+ | |||
Am folosit opțiunea ''%%-a%%'' (''%%ls -a%%'') pentru a afișa și fișierele și directoarele ascunse. Directorul ''%%.git%%'' este un director ascuns. | Am folosit opțiunea ''%%-a%%'' (''%%ls -a%%'') pentru a afișa și fișierele și directoarele ascunse. Directorul ''%%.git%%'' este un director ascuns. | ||
Line 106: | Line 120: | ||
==== Conectarea celor două repository-uri ==== | ==== Conectarea celor două repository-uri ==== | ||
- | Am creat până în acest moment un repository local și unul remote. Trebuie să le interconectăm pentru a lucra cu ele. | + | Am creat până în acest moment un repository local (pe PC-ul nostru) și unul remote (platforma GitHub). Trebuie să le interconectăm pentru a lucra cu ele. |
În cazul în care suntem mai mulți membri în echipă, fiecare membru va conecta repository-ul său local, la repository-ul remote. Pentru conectarea celor două repository-uri folosim comanda de mai jos, dată în directorul unde este repository-ul local Git (în cazul nostru ''%%/home/student/array-sorting-algorithms%%''): | În cazul în care suntem mai mulți membri în echipă, fiecare membru va conecta repository-ul său local, la repository-ul remote. Pentru conectarea celor două repository-uri folosim comanda de mai jos, dată în directorul unde este repository-ul local Git (în cazul nostru ''%%/home/student/array-sorting-algorithms%%''): | ||
<code bash> | <code bash> | ||
- | student@uso:~/array-sorting-algorithms$ git remote add origin https://github.com/{username}/array-sorting-algorithms.git | + | student@uso:~/array-sorting-algorithms$ git remote add origin https://github.com:{username}/array-sorting-algorithms.git |
</code> | </code> | ||
+ | |||
În comanda de mai sus ''%%{username}%%'' este numele utilizatorului nostru de pe GitHub. De exemplu, pentru autorul acestui capitol, ''%%{username}%%'' se înlocuiește cu ''%%lizababu%%''. | În comanda de mai sus ''%%{username}%%'' este numele utilizatorului nostru de pe GitHub. De exemplu, pentru autorul acestui capitol, ''%%{username}%%'' se înlocuiește cu ''%%lizababu%%''. | ||
Conectarea celor două repository-uri înseamnă setarea repository-ului ''%%origin%%'', adică repository-ului remote la care se conectează cel local. | Conectarea celor două repository-uri înseamnă setarea repository-ului ''%%origin%%'', adică repository-ului remote la care se conectează cel local. | ||
- | Imaginea de mai jos arată cum arată cum se contectează repository-urile **remote** și **local**. Sincronizarea lor se face prin intermediul operațiilor **push** și **pull** care sunt prezentate pe parcursul secțiunii ''%%app_dev_first_commits%%''. | + | Imaginea de mai jos arată cum arată cum se contectează repository-urile **remote** și **local**. Sincronizarea lor se face prin intermediul operațiilor **push** și **pull** care sunt prezentate pe parcursul secțiunii ''%%Primele comitturi%%''. |
{{:uso:laboratoare:laborator-04:GitHub-remote-local-repos.gif?700}} | {{:uso:laboratoare:laborator-04:GitHub-remote-local-repos.gif?700}} | ||
+ | |||
+ | |||