Sunteți pe pagina 1din 96

GIT

Sistem Control
Versiuni
v3.0

1
Agenda

1. Introducere 8. Conflict!
2. Lansarea terminalului 9. Branches (Ramuri)
3. Instalarea lui GIT 10. Fișierul .gitignore
4. Cum funcționează sistemul de control al 11. Depanarea problemelor cu Git
versiunilor? 12. Informații de copyright strict necesare
5. Git – sintaxa de bază 13. Linkuri utile pentru utilizatorii de GIT
6. Repositories (Depozitare)
7. Lucrul în echipă

2
Introducere

3
Controlul Versiunilor – ce înseamnă?

Un sistem de control al versiunilor (VCS) este o


aplicație software creată pentru urmărirea
schimbărilor, de exemplu schimbările codului
sursă.
Există multe versiuni de astfel de sisteme de
control (cum ar fi CVS, Subversion, Mercurial,
Perforce)
Cel mai folosit în IT este: Git.

4
Cum folosim un VCS?
Folosirea unui VCS este foarte importantă când lucrezi la un proiect.
Aduce numeroase avantaje:

Lucrul în echipă – VCS-urile suportă lucrul la Reversia schimbărilor – ne putem


un proiect. Ele rezolvă conflicte (situații în reîntoarce la orice versiune de cod din trecut.
care mai mulți oameni au lucrat la același Păstrarea backup-urilor proiectelor -
fișier). folosirea depozitarelor (repositories) externe,
Suport în gestiunea versiunilor proiectului permit accesarea codului de pe orice
– datorită abilității de a marca anumit puncte computer, chiar și în cazul în care
în istoric și reîntoarcerea codului într-unul sau echipamentul de lucru suferă o defecțiune.
altul dintre aceste puncte, putem să urmărim
toate versiunile programului nostru.

5
Ce este Git?

Git este cel mai poular VCS. A fost realizat în


2005 de către Linus Torvald (creatorul Linux) ca
sistem de control pentru susținerea proiectelor
Open Source.
Este un sistem distribuit standard. Asta înseamnă
că întregul istoric al proiectului este stocat pe
fiecare computer, care are un depozitar legat la
proiectul aferent.
Git poate lucra fără probleme cu fișiere text, dar
fișierele binare (imagini, pdg-uri etc.) pot fi ceva
mai greu de controlat.

6
Lansarea
terminalului

7
Cum să deschizi terminalul?
Dacă ești un utilizator de Ubuntu
Deschide-ți terminalul cu următoarea combinație user@comp:~S
de taste:
Ctrl+Alt+T

8
Cum să deschizi terminalul?
Dacă ești utilizator de windows:
1. Instalează Git Bash (vei găsi un manual în Agata@Agata-Coderslab MINGW64 ~$
capitolul următor).
2. Deschide Git Bash.

9
Cum să deschizi terminalul?
Dacă ești utilizator de MacOS
1. Deschide terminalul folosind combinația de MacBook-Pro: ~SomeUser
taste: Cmd+space.
2. În fereastra Spotlight tastează terminal.
3. Confirmă cu Enter.

10
Instalarea Git

11
Instalarea Git
Dacă ești user de Ubuntu
1. Deschide terminalul.
2. Introdu următoarele comenzi în terminal:
sudo apt-get update
sudo apt-get install git

Aceia dintre voi, care folosesc sistemul de operare


oferit, already have Git installed

12
Installer Git
Dacă ești un utilizator Windows
1. Introdu https://git-scm.com/download/win
(programul se va descărca automat).
2. Pe durata instalării alege opțiunile implicite.
3. rulează programul descărcat.

13
Instalarea Git
Dacă ești un utilizator MaxOS
1. Du-te la https://git-scm.com/download/mac
(programul se va descărca automat).
2. Pe durata instalării alege opțiunile implicite.
3. rulează programul descărcat.

14
Configurarea Git
Setări de bază
Git are nevoie de datele personale, ca să poată adăuga schimbările codului. Adaugă-ți numele,
prenumele și e-mailul în configurație,
Lansează terminalul și introdu comenzile următoare:
git config --global user.name "name and last name"
git config --global user.email "email address"

15
Configurare Git
Editorul de Text
Ai putea dori să comentezi schimbările interactiv,
folosind un editor de text. Un editor de text pentru
Git este Vim*. Dacă vrei să schimbi editorul**,
citește slide-urile următoare.
* Vim este unul dintre cele mai clasice, editoarele de text pentru sistemele UNIX și
altele asemenea. E foarte folositor. deși e dificile de folosit mai ales pentru
începători. (https://en.wikipedia.org/wiki/Vim)

** Ai încredere și fă-o.

16
Configurarea Git

Ubuntu – deschide terminalul și introdu:


git config --global core.editor nano

Nano este un editor de text convenabil care


folosește interfața liniei de comandă (o folosești în
terminal). Mai multe despre Nano:
https://en.wikipedia.org/wiki/GNU_nano

17
Configurarea Git

Mac – deschide terminalul și introdu:


git config --global core.editor nano

Nano e un editor de text lejer care folosește linia


de comandă (îl folosești în terminal). Mai multe
despre Nano:
https://en.wikipedia.org/wiki/GNU_nano

18
Configurarea Git

Windows – deschide terminalul


Aceste comenzi nu întorc informații (când apeși
Enter o nouă linie va apărea în terminal și poți
introduce o comandă nouă).

Introdu comenzile (apasă Enter după fiecare introducere):


git config --global core.editor notepad
git config --global format.commitMessageColumns

19
Cum
funcționează
controlul
versiunilor?

20
Cum funcționează controlul versiunilor?

Imaginează-ți controlul versiunilor ca pe o bază de


date. Când ai terminat de scris programul, poți
salva versiunea curentă a codului, în această bază
de date.
Mai târziu, când vrei să verifici această versiune,
programul îți va spune care sunt diferențele dintre
versiunea curentă și cea salvată anterior. Îți permit
să urmărești schimbările codului.

21
Cum funcționează controlul versiunilor?
Luni, 9:00 am
Agata creează fișiere noi:
index.html
about-us.html
Le salvează întru-n sistem de control al versiunilor
și descrie schimbările făcute

22
Cum funcționează controlul versiunilor?
Miercuri, 2:00 pm
Agata modifică acest fișier:
index.html

Agata creează două fișiere noi:


termsandconditions.html
funny-kitten.png
Le salvează întru-n sistem de control al versiunilor
și descrie schimbările făcute

23
Cum funcționează controlul versiunilor?
Vineri, 7.55 pm (5 minute și e weekend)
Marin modifică fișierul:
termsandconditions.html
Elimină mare parte a conținutului din
termsandconditions.html și schimbă apsectul
fișierului.
Îl salvează în sistemul de control al versiunii și
descrie schimbările făcute.

24
Cum funcționează controlul versiunilor?
BRUSC!
Se dovedește că Marin n-ar fi trebuit să modifice
termsandconditions.html!
Înseamnă că toat munca făcută s-a pierdut?
Din fericire - nu! Marin se poate întoarce la
versiunea de dinaintea schimbării - versiunea
numărul 2, din data de Miercuri, 2:00 pm.
Weekend-ul a fost salvat! Ce bine!

25
Git – sintaxa
primară

26
Bazele lui Git

Poți folosi Git în două moduri:


prin consolă,
printr-o interfață grafică (instalată adițional -
există diverse aplicații disponibile).
Recomandăm utilizarea Git din linia de comandă.
Te va ajuta să înțelegi cum funcționează Git și
cum să-l folosești.

27
Git

Caînd înveți să folosești o unealtă nouă poate fi


dificil să înțelegi despre ce e vorba. Din fericire
există o mulțime de tutoriale online interesante,
video-uri etc. care te pot ajută să prinzi ce este
GIT într-un mod cât mai potrivit ție.Aruncă o privire
peste cursul gratuit oferit de Code School:
https://www.pluralsight.com/courses/code-school-
git-real

28
GIT CheatSheet (Foaia cu Trucuri)

De asemenea poți folosi un set al celor mai


folosite comenzi, așa zisul Git CheatSheet.
Poți găsi multe asemenea cheatsheet-uri, cum ar
fi:
https://www.git-tower.com/blog/git-cheat-sheet
https://services.github.com/on-
demand/downloads/github-git-cheat-sheet.pdf
http://www.cheat-sheets.org/saved-copy/git-
cheat-sheet.pdf

29
Depozitare
(Repositories)

30
Depozitar (Repository)

Git stochează codul tău sursă într-un depozitar.


Depozitarele (Repositories) includ schimbări
consecutive ale codului tău (încă de la începutul
acestuia), care se tot adună pe măsură ce lucrezi,
până la versiunea curentă.
Un depozitar poate fi local sau extern (remote).

31
Depozitarul local

Un depozitar local e situat pe un hard-drive.


Când lucrezi la aplicația ta, poți (sau mai precis,
trebuie) să stochezi în el toate schimbările.

Un depozitar local e salvat în directorul rădăcină


al proiectului tău, într-un director ascuns numit .git.
(fișierele care încep cu . sunt ascunse în linux)

32
Lucrul local
Proiectul nou al lui Marin – o pagină de
introducere (Landing Page)
Marin creează un depozitar local (pentru moment
este gol). Pentru a crea depozitarul, trebuie să
introducă :
git init

Ar trebui să primească următorul răspuns:


marin@comp: ~/workspace/landing-page$ git init
Initialized empty Git repository in /landing-page/.git/
marin@comp: ~/workspace/landing-page$

33
Lucrul local
Marin controlează versiunile fișierelor
Marin creează un nou fișier: landing-page.html
Acum, Marin trebuie să informeze Git, despre
intenția sa de a adăuga fișierele.
git add landing-page.html

Git nu va întoarce informații.

34
Lucrul local
Marin stochează schimbările în sistemul de
control al versiunilor
Acum plasează modificările in Git: landing-
page.html

Sistemul trebuie să rețină ce modificări a făcut!

git commit -m "am adaugat header și footer noi"

Opțiunea -m folosește la descrierea modificărilor efectuate. Descrierea este pusă în ghilimele, și


urmează un parametru. Această informație este obligatorie! Git nu va accepta altfel!

35
Depozitarul extern (remote)

Depozitarul extern este situat pe un server extern, cum ar figithub.com.

Folosești un depozitar extern când vrei să împarți codul cu alte persoane (de exemplu, colegii) sau vrei
să te alături unui proiect deja existent.

36
Depozitar Local vs Extern

Dacă vrei să te alături unui proiect existent, copiază depozitarul extern pe hard drive-ul tău. Această
acține se numește clonare.
Un depozitar local cu versiunea curentă va fi creat.
După efectuarea schimbărilor, salvezi(commit) schimbările într-ul depozitar local, și apoipush (le
împingi) pe un server extern. Din acel moment, ceilalți vor putea fi văzute și de alții.

37
Lucrul cu depozitare
Proiect nou – un magazin online

1. Agata creează un depozitar extern (acesta e


gol).

38
Lucrul cu depozitare
Proiect nou – un magazin online
2. Apoi, Agata clonează depozitarul extern pe
laptopul ei. Acum are un depozitar local.

git clone <adresa depozitarului>

În acest exemplu, depozitarul se numește: online-


shop.git

git clone https://github.com/martin-barylka/online-shop.git


Cloning into "online-shop"...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

39
Lucrul cu depozitare
Proiect nou – un magazin online
3. Agata lucrează la noile fișiere.
product.html
basket.html
Agata le adaugă în sistemul de control al
versiunilor:
git add *.html

Acestea sunt vizibile numai pentru Agata!

Apoi, Agata salvează modificările doar în Git:


git commit -m "Pagini pentru produs si cos"

40
Lucrul cu depozitare
Update-ul unui depozitar extern
4. Agata împinge modificările în depozitarul
remote.
product.html
basket.html
git push

Din acest punct, modificările sunt vizibile pentru


întreaga echipă.

41
Lucrul în echipă

42
Lucrul în echipă

Marin se alătură proiectului


1. Marin clonează un depozitar pe laptop-ul său. Astfel creează un depozitar local.
git clone <adresă depozitar>

2. Marin lucrează la o pagina de produs și una de


comenzi: product.html, order.html.

43
Lucrul în echipă
Marin se alătură proiectului
3. Marin are nevoie să place de la calculator. Când se întoarce, vrea să verifice modificările făcute până
în prezent:

martin@xwing:~/workspace/sklep$ git status


On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: product.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
order.html
no changes added to commit (use "git add" and/or "git commit -a")
marin@comp:~/workspace/shop$

44
Lucrul în echipă

45
Lucrul în echipă
Marin se alătură proiectului
4. Marin adaugă modificările în Git:
product.html
order.html
git add .
git commit -m "product and order"

46
Lucrul în echipă
Marin se alătură proiectului
4. Marin adaugă modificările în Git:
product.html
order.html
git add .
git commit -m "product and order"

Atenție: acest punct e pus aici intenționat!


Înseamnă "toate fișierele adăugate sau modificate
din directorul curent și cele din interiorul său"

47
Lucru în echipă
Marin Se alătură proiectului
5. Marin împinge modificările către depozitarul
extern.
git push

48
Lucrul în echipă
Ce se întâmplă dacă Agata se întoarce să
lucreze la depozitarul ei extern?
6. Agata a făcut versiunea 1, Martin a adăugat
versiunea 2 în depozitarul extern.
Agata editează un fișier:
product.html
Agata adaugă fișierul în sistemul de control al
versiunilor și declară (commit) modificările:
git add product.html
git commit -m "working on a product"

49
Lucrul în echipă
BRUSC!
7. Agata încearcă să împingă fișierul (git push), dar primește un mesaj ca cel de jos. Git o informează
pe Agata, că sun schimbări declarate de Marin în depozitarul extern. Modificările lui marin, previn
declarările (commits) modificărilor Agatei
Can we solve Problema Agatei?
! [rejected] master -> master (fetch first)
error: failed to push some refs to
"https://github.com/martin-barylka/online-shop.git"
HINT: Updates were rejected because the remote contains work that you do
HINT: not have locally. This is usually caused by another repository pushing
HINT: to the same ref. You may want to first integrate the remote changes
HINT: (e.g., "git pull ...") before pushing again.
HINT: See the "Note about fast-forwards" in "git push --help" for details.

50
Lucrul în echipă

51
Lucrul în echipă
Nimic rău nu s-a întâmplat
8. Agata trebuie să combine modificările ei cu ale lui Marin. Ar trebui deci să utilizeze comanda pull
git pull

Git va sugera o descriere pentru schimbările făcute de Agata, e suficient să le accepte


Merge branch "master" of https://github.com/marcin-barylka/online-shop
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with "#" will be ignored, and an empty message aborts the
commit.

52
Lucrul în echipă

53
Conflict!

54
Conflict!

Agata lucreză la fișierul order.html. Ea pune fișierul în depozitarul extern. Câteva zile mai târziu, Marrin
lucrează la același fișier. El încearcă să-l pună tot pe depozitarul extern. El primește un mesaj (deja
cunoști acest mesaj) despre celelalte modificări aflate în așteptare în depozitarul extern. Marin încearcă
să descarce modificările cu comanda git pull
! [rejected]master -> master (fetch first)
error: failed to push some refs to
"https://github.com/martin-barylka/online-shop.git"
HINT: Updates were rejected because the remote contains work that you do
HINT: not have locally. This is usually caused by another repository pushing
HINT: to the same ref. You may want to first integrate the remote changes
HINT: (e.g., "git pull ...") before pushing again.
HINT: See the "Note about fast-forwards" to "git push --help" for details.
agatalagata:~/workspace/online-shop$

55
Conflict!

56
Conflict!
BRUSC!
marin@comp:~/workspace/online-shop$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/martin-barylka/online-shop
c9d6e9d..38d8078 master -> origin/master
Auto-merging order.html
CONFLICT (content): Merge conflict in order.html
Automatic merge failed; fix conflicts and then commit the result.
marcin@xwing:~/workspace/online-shop$

Git îl informează pe Marin despre conflict!


Înseamnă că se va certa cu Agata?

57
Conflict!

58
Conflict!
Un conflict în cod nu e lucru atât de grav.
Git nu a reușit să combine automat modificările lui Marin cu ale Agatei
Marin trebuie să combine modificările manual, și apos să efectueze commit și push cu rezultatul
combinării.
Contrar a ceea ce te-ai putea aștepta, acest lucru e destul de ușor pentru programatori. Încă pot lucra pe
același fișier simultan.
Git se va asigura că nu vor suprascrie modificările unuia peste ale celuilalt. Dacă Git nu poate efectua
integrarea, va cere ajutorul programatorilor.

<<<<<<< HEAD
======
>>>>>>> 38d80788ccebc005ed48aa225cb5668d8704474b
<h1>Order</h1>

59
Conflict!

Ce înseamnă noile bucăți de cod?

<<<<<<< HEAD
======
>>>>>>> 38d80788ccebc005ed48aa225cb5668d8704474b
<h1>Order</h1>

60
Conflict!

Ce înseamnă noile bucăți de cod?


HEAD - acestea sunt ultimele schimbări din depozitarul local (cele pe care Marin tocmai le-a făcut). Ele
încep cu această linie.

<<<<<<< HEAD
======
>>>>>>> 38d80788ccebc005ed48aa225cb5668d8704474b
<h1>Order</h1>

61
Conflict!

Ce înseamnă noile bucăți de cod?


HEAD - acestea sunt ultimele schimbări din depozitarul local (cele pe care Marin tocmai le-a făcut). Ele
încep cu această linie.
Linia indică sfârșitul modifcărilor efectuate în depozitarul local. Sub ea găsești modificările din
depozitarul extern, adică modificările Agatei din zilele anterioare.

<<<<<<< HEAD
======
>>>>>>> 38d80788ccebc005ed48aa225cb5668d8704474b
<h1>Order</h1>

62
Conflict!

Ce înseamnă noile bucăți de cod?


HEAD - acestea sunt ultimele schimbări din depozitarul local (cele pe care Marin tocmai le-a făcut). Ele
încep cu această linie.
Linia indică sfârșitul modifcărilor efectuate în depozitarul local. Sub ea găsești modificările din
depozitarul extern, adică modificările Agatei din zilele anterioare.
Ultima linie reprezintă capătul modificărilor din depozitarul extern. Numărul cel lung care începe cu
38d807, este ID-ul ultimei declarări (commit), aflate în depozitarul extern.

<<<<<<< HEAD
======
>>>>>>> 38d80788ccebc005ed48aa225cb5668d8704474b
<h1>Order</h1>

63
Conflict!
Marin rezolvă conflictul. Fișierul corectat:
El are nevoie să: <h1>Order</h1>
1. Să elimine liniile adăugate automat de Git
(liniile 1, 5 și 7).
2. Să combine codul astfel încât să salveze
modificările Agatei. Acest pas cere înțelegerea
schimbărilor și combinarea lor manuală

64
Conflict!
Marin rezolvă conflictul
3. Adaugă modificările în sistemul de control al versiunilor (git add).
4. Execută un git commit cu un comentariu aferent soluționării conflictului.
5. Împinge schimbările către depositarul remote git push.

marin@comp:~/workspace/online-shopy$ git add order.html


martin@xwing:~/workspace/online-shop$ git commit -m "conflict resolution"
[master b1de440] Conflict resolution
martin@xwing:~/workspace/online-shop$ git push

65
Unelte de
soluționare a
conflictelor

66
Unelte de combinare a codului

Soluționarea manuală a conflictelor este


consumatoare de timp, minuțioasă și predispusă
la erori. Pentru a-ți ușura munca, poți folosi o
unealtă potrivită – meld este un exemplu bun.

67
meld
Instalare
Dacă folosești script-ul nostru de instalare, meld Iată cum îl configurezi:
este deja instalat și configurat pe mașină. Dacă git config --global merge.tool meld
nu, atunci în Ubuntu o poți face folosind
comanda: Linia de mai sus spune că meld este din acest
moment înainte unealta principală de soluționare a
sudo apt install meld combinării (merge) fișierelor din Git.
Pe MacOS e făcută astfel:
brew cask install meld

68
Unealta de integrare a modificărilor
Rezolvarea conflictelor
Acum poți rezolva conflictele într-un mod mai simplu. Tot ce trebuie să faci e să introduci următoarea
comandă în terminal:
git mergetool

Git va revizui toate conflictele și va cere instrucțiuni:


$ git mergetool
Merging:
order.html

Normal merge conflict for 'order.html':
{local}: modified file
{remote}: modified file

69
meld

Vei vedea o fereastră cu trei secțiuni:

70
meld
Panoul din stânga arată modificările locale, adică ramura (branch) pe care te afli.
Panoul din dreapta arată depozitarul extern sau, mai precis ramura cu care vrei să combini
(merge) ramura ta .
Panoul din mijloc arată codul rezultat.

71
meld

Efectuând click pe săgețile corespunzătoaer putem integra modificările în fișeirul rezultat. De exemplu,
făcând un click pe săgeata de stânga (din panoul drept), vei muta elementul <meta> în panoul din mijloc:

72
Integrarea modificărilor

După salvarea modificărilor (CTRL+S) și soluționarea tuturor conflictelor va trebui să efectuezi commit
pentru integrarea schimbărilor:
git add .
git commit -m "conflict rezolvat"

...și gata, ai reușit!

73
Ramuri
(Branches)

74
Ramura (Branch)

Marin are o idee, venită în timp ce își scria codul,


cum că ar putea să aranjeze anumite elemente ale
website-ului în mod diferit. Managerul său s-a
gândit că ideea ar putea fi bună și l-a rugat să
experimenteze puțin cu sursele de cod.Marin nu
vrea s[ strice lucrul Agatei – în caz că
experimentele nu funcționează adecvat, diverse
probleme ar putea să apară. Dar dacă efortul să
este unul de succes, modificarea ar putea fi
implementată.

75
Ramura (Branch)
Marin creează o altă ramură (branch)
O ramură (branch) este o copie a codului din depozitarul curent care poate fi dezvoltată independent de
versiunea principală. Este folosită pentru experimentare, sau (de obicei) pentru a adăuga funcționalități
noi, în așa fel încât, acestea să nu strice versiunile funcționale anterioare.
Crearea unei ramuri:
Pentru a crea o nouă ramură, introdu următoarea comandă în terminal:
git checkout -b <nume-ramură>

Deci, dacă Marin vrea să creeze o nouă ramură numită experiment, trebuie să introducă următoarea
comandă:
git checkout -b experiment

76
Ramura (Branch)
Alternarea ramurilor
Când marin introduce următoarea comandă în terminal:
git branch

poate vedea ce ramuri au fost create anterior și pe ce ramură se află în prezent


$ git branch
* experiment
master

master este principala ramură de cod. Aceasta este creată atuomat la inițierea depozitarului. Ramura
numită experiment este cea pe care Marin tocmai a inițiat-o. Un asterisc se află alături de ea. Acesta
marchează ramura pe care Marin se află în prezent.

77
Ramura (branch)

Poți alterna ramurile oricând. Tot ce trebuie să faci este să introduci comanda:
git checkout <nume-ramură>

Dar, înainte ca Marin să poată schimba ramura, el trebuie să declare (commit) modificările:
git add order.html
git commit -m "experimental changes"
git checkout master

78
Ramură (Branch)
Combinarea ramurilor
Marin și-a termiat lucrul la ramura experimentală a
codului și a primit aprobarea de a o combina cu
principala ramură a codului. Astfel el are nevoie să
efectueze un (merge) al schimbărilor sale în
ramura principală.
În primul rând, e necesar ca el să treacă pe
ramura principală:
git checkout master

Apoi trebuie să dea comanda merge:


Atenție: conflicte pot apărea în urma combinării.
git merge <name-of-branch-with-changes> Acestea ar trebui rezolvate cu ajutorul uneltelor de
deci în cazul ramurii experiment, va introduce: combinare.

git merge experiment


79
Fișierul .gitignore

80
.gitignore

Unele fișiere în proiectul nostru au rost numai pentru noi și nu vrem să le plasăm în depozitar. De
exemplu, acesta include:
configurarea fișierelor editorului tău de cod (alți programatori ar putea folosi alte unelte de editare și
n-au nevoie de ele )
fișiere cu parole ale bazelor de date (din motive de securitate),
fișiere binare complexe (cum ar fi fișierele .class, .pyc files etc.),
...și multe altele.
Cum să previi trimiterea în depozitar al acestor fișiere?

81
.gitignore
Exact :) Greșit! :(
Ar trebui să creezi un fișier .gitignore, unde De fiecare dată când adaugi fișiere în contolul
creăm o listă de fișiere și directoare, care nu vor fi versiunior, introduci numele lor aici. Ține minte să
adăugate în depozitar. nu adaugi aici fișiere în plus:
Atenție: reține că aceste fișiere care încep cu . $ git add client.html folder.html
sunt fișiere ascunse în li Linux și Mac!
...pentru că poți greși adăugând prea multe.
Reține: chiar dacă elimini aceste fișiere la un
moment dat, vechile versiuni rămân în depozitar
pentru totdeauna!

82
.gitignore
Construcția fișierului .gitignore
În fișierul .gitignore, pe linii consecutive introduci numele directoarelor și fișierelor, astfel:
notes.txt
pycache/

Următoaerle fișiere nu vor fi adăugate:

83
.gitignore
Construcția fișierului .gitignore
În fișierul .gitignore, pe linii consecutive introduci numele directoarelor și fișierelor, astfel:
notes.txt
pycache/

Următoaerle fișiere nu vor fi adăugate:


fișierul notes.txt,

84
.gitignore
Construcția fișierului .gitignore
În fișierul .gitignore, pe linii consecutive introduci numele directoarelor și fișierelor, astfel:
notes.txt
pycache/

Următoaerle fișiere nu vor fi adăugate:


fișierul notes.txt,
directorul pycache/ și fișierele incluse.

85
.gitignore
Construcția fișierului .gitignore – continuată
De asemenea poți folosi asterisc (*): un singur asterisc ține loc de orice șir de caractere din numele unui
fișier, de exemplu
*.class

înseamnă că niciun fișier care se termină cu .class nu vor fi adăugate în depozitar.


Două asteriscuri țin loc de șir de caractere în numele căi unui director, de exemplu:
**/logs

înseamnă că următoarele fișiere nu vor fi adăugate în depozitar:


logs/debug.log,
logs/2018/06/04/access.log,
build/logs/debug.log.

86
.gitignore
Construcția fișierului .gitignore – continuată
logs/**/debug.log

înseamnă că următoarele fișiere nu vor fi adăugate în depozitar


logs/debug.log,
logs/2018/06/04/debug.log,
logs/build/debug.log,
dar aceste fi;iere:
logs/access.log,
logs/2018/06/04/build.log,
logs/build/output.txt,
vor fi adăugate.

87
.gitignore

Găsești o descriere solidă a sintaxei fișierului .gitignore aici:


https://www.atlassian.com/git/tutorials/saving-changes/gitignore
https://git-scm.com/docs/gitignore
Complicat?
Nu te îngrijoră! această pagină https://www.gitignore.io/ include un creator special pentru fișierul
.gitignore!

88
Depanarea Git

89
Github nu îți îngăduie să faci un push

Dacă nu poți să împingi modificările cu o comandă (git push), you have probably cloned your original
repository instead your fork. The message which appears in the terminal in this case is as follows:

Dacă nu poți să împingi modificările cu o comandă (git push), este posibil să fi clonat depozitarul
original, în locul unei ramificații (fork). Acest mesaj pare în terminal în acest caz, cam așa:
marin@dcomp:~/workspace/spinning-cube$ git push origin master
ERROR: Permission to marin2704/spinning-cube.git denied to marin-cmp.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

90
Github nu îți îngăduie să faci un push
Cum să înlături această eroare?
Intră în contul tău de Github și găsește bifurcația problematică a depozitarului.
Alege opțiunea Clone or download și copiază depozitarul.
Adresa ar trebui să arate așa: https://github.com/<your_login>/<reposotory_name.git>.

Deschide terminalul și du-te la directorul care include depozitarul problematic.


Introdu comanda:
git remote set-url origin
https://github.com/<userul_tau>/<nume_depozitar.git>
și apasă enter.

91
Informații
obligatorii de
copyright

92
Copyrights

Icons designed by Freepik from Icons designed by Madebyolivier from


www.flatcon.com www.flatcon.com

93
Linkuri utile
pentru utilizatorii
de Git

94
Linkuri utile
Pagina Git Project
https://git-scm.com
Manualul oficial Git (gratuit,
în diverse forme)
https://git-scm.com/book/en/v2
Un tutorial interesant de Git
https://try.github.io/levels/1/challenges/1
Alt tutorial de Git
https://www.git-
tower.com/learn/git/ebook/en/mac/introduction

95
Git – Temă

Vezi linkurile de mai jos și completează minim două tutoriale.


http://gitreal.codeschool.com/levels/1
http://www.git-tower.com/learn/git/videos
http://www.dataschool.io/git-and-github-videos-for-beginners

Pentru utilizatori mai avansați:


http://pcottle.github.io/learnGitBranching

96

S-ar putea să vă placă și