GIT & GitLab Flashcards

1
Q

System Subversion (SVN)

A

Koristi centralni server na kojem ce se nalaziti sav izvorni
kod, pamte se trenutne verzije projekata i svi diff-ovi na osnovu kojih mozemo da vidimo kako je
projekat u nekom trenutku izgledao. Problem je sto konstantna konekcija sa serverom nije
moguca zbog interneta tj. ne mozemo nista offline da radimo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

GIT - Sistem za pracenje verzija

A

Treba da bude distribuiran. Svi programeri u lokalu
imaju kompletnu istoriju celog projekta. Svaki programer ima svoj racunar na kom ima svoj
projekat + ceo repozitorijum gde se nalazi cela istorija tog projekta. Drugi programer isto. Time
je omoguceno da svako kod sebe lokalno moze da pravi izmene na projektu, bez konekcije sa
serverom. Pored toga, postoji udaljeni server koji je glavni, kojem se sve izmene salju I odakle se
sve izmene preuzimaju. Na taj nacin, komunikacija se vrsi samo izmedju servera I konkretnog
programera (a ne izmedju programera medjusobno)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

git diff

A

git diff – izmene od poslednjeg commita. Napomena: ovo se odnosi na izmene koje su u working
area, kada se jednom doda fajl u staging area komandom git add ne prikazuje se vise uopste
preko diff

git diff id_commita – prikazuje razlike od zadatog komita do trenutne verzije (SVE izmene, bez
obzira da li su u working ili staging area). Ne mora ceo id_commita da se pise, dovoljno je prvih
nekoliko (6) cifara, ostale ce git dopuniti sam. U slucaju da ima vise komitova cije su to pocetne
cifre, bira se skoriji

git diff HEAD – diff od poslednjeg commita

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

git log

A

git log –oneline - izlistavaju se komitovi, svaki u zasebnoj liniji (id, zaglavlje)

git log –oneline –all –decorate –graph – za lepsi prikaz istorije logova + stablo grana

git log –putanja_do_fajla_koji_nas_zanima – izlistava samo commitove koji su vezani za taj fajl

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Razlika izmedju tagova I grana

A

Grana sluzi da nastavimo sa razvojem odvojeno od glavne verzije programa, a tagovi samo da
damo ime konkretnom komitu I da taj tag uvek pokazuje na taj konkretan komit

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Razlika izmedju git fetch i git pull

A

git fetch – povlaci sve izmene ali ne primenjuje

git pull = git fetch + git merge

git merge ime_grane_koju_ubacujemo_u_nasu_trenutnu – sve komitove iz grane koju
navodimo prenosi u novonastalu granu koju spaja sa onom u kojoj smo trenutnu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Razlika izmedju git merge I git rebase

A

Merge pravi 1 commit (od 2 koja spaja) I istorija osta ista nadalje. Graf je haotican

Rebase sve izmene se primenjuju na master (aktuelnu verziju). Dodajemo nove komitove I novu
istoriju (sve komitove koji su se desili na master grani posle pravljenja te grane
hocu da prebaci na vrh te nove grane) . Graf je linearan

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

git stash

A

Ponistava izmene ali ostavlja ih za slucaj da nam mozda kasnije zatrebaju
(poslednja se vraca sa git stash pop, a moze I: git stash pop stash@{1}, a izlistavamo sa
git stash list)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

git revert

A

Ako zelimo da ponistimo neke izmene tj. da neki komit napravimo inverznim

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

git cherry-pick

A

Kada zelimo samo 1 commit da prebacimo I na druge grane (korisno kada npr.
imamo isti bag na vise grana, a popravimo ga na jednoj, hocemo da bude popravljen na svakoj)
U toj kopiramo sha kod komita u kom je popravljen bag, prebacimo se na tu drugu granu na kojoj
je bag popravljen I onda uradimo: git cherry-pick sha_kod. To ce da prenese na novu granu isti
taj komit (isti sadrzaj tog komita, ali novi jedinstveni id)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

git commit –amend

A

Modifikovanje poslednjeg komita (zapravo pravi novi komit, a uklanja
stari, taj stari ne pripada vise nijednog grani)
Opciju –amend treba da koristimo samo za komitove koji nisu deljeni sa ostalim članovima tima. Problem je u tome što vrši izmene nad git grafom, jer ova opcija zapravo obriše stari komit i zameni ga novim

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Bisekcija GIT

A

Sluzi kada imamo problem na nekom komitu konkretno a znamo da se u nekom ranijem komitu taj problem nije javljao (npr. bag). Ideja jeste da pretrazimo istoriju commit-ova pomocu algoritma bisekcije drveta:

  1. git bisect start – zapocinje algoritam binarne pretrage
  2. git bisect good id_commita – time kazemo da bag nije postojao u tom komitu
  3. git bisect bad master – u ovom komitu (master) postoji bag
  4. Pomocu algoritma dobijamo komitove i broj koraka koji jos treba da se uradi do utvrdjivanja u kom komitu je problem nastao. Kada dobijemo id_commita treba da proverimo da li taj bag postoji u tom commit-u i ukoliko postoji treba da uradimo git bisect bad u suprotnom treba uraditi git bisect good dok ne ostane 0 koraka koji treba da se urade jos.
  5. git bisect reset
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

git worktree

A

Kao da pravi ceo klon repozitorijuma na nekoj drugoj lokaciji (npr. git worktree
add ime_direktorijuma ime_nove_grane – time smo se pozicionirali u dati direktorijum na bas tu
datu granu). Razlika izmedju ovoga I git clone je sto git worktree ne zauzima duplo mesta (deli se
.git direktorijum)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Ukljucivanje drugih projekata u nas projekat

A

Postoje 2 mogucnosti da kopiramo ceo direktorijum neke verzije nekog fajla ili da to uradimo putem git submodule add url_do_repozitorijuma.
Kada kloniramo neke repozitorijume koji imaju podmodule,
moramo rucno da kloniramo I njih git submodule update –init , a ako ti submoduli imaju svoje submodule, onda dodajemo opciju –recursive na kraj ove komande

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Sta sve treba da sadrzi description u okviru Merge Requesta?

A
  • sta je promenjeno
  • razlog zasto je promenjeno
  • nacin na koji je nesto uradjeno
  • objasniti alternativne pristupe I zasto je nas odabrani pristup bolji od njih
  • ukoliko ta nasa izmena popravlja neki bag, obavezno staviti link do njega ( npr. Fixes
    !42 a npr. Fixes: #1 daje referencu ka zadatku pod rednim brojem 1)
  • Assignee – ko treba da uradi taj zadatak
  • Reviewer – jedna ili vise ljudi od kojih trazimo da pogleda nas kod (oni imaju opciju
    Approve da odobre nas kod ukoliko je sve dobro)
  • Milestone – do kada ovaj zadatak treba da bude uradjen
  • Labels – kao tag da nas lakse odvede do nekog manjeg dela
  • Merge options:

▪ Delete source branch when merge request is accepted. (automatski brise
granu koju smo napravili zbog tog merge request-a)
▪ Squash commits when merge request is accepted. (sve komitove koje
smo napravili ce pretvoriti u 1 I to ce se na master grani prikazati kao 1
komit umesto cela istorija komitova, preporuka: ne )

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Sta sve treba da se proverava u code review-u ?

A
  • dizajn softvera
  • imenovanje funkcija I promenljivih
  • formatiranje (kroz ceo projekat treba da bude 1 format, npr. snake_case)
  • slozenost (vremenska I memorijska)
  • korektnost konkretnog programskog jezika (npr. da li na ispravan nacin koristimo C++)
  • pokrivenost testovima
  • azuriranje dokumentacije
  • still pisanja (npr. gde se stavljaju { } )
  • mrtav I zakomentarisan kod
  • primenljivost na ranije verzije
  • citljivost
  • svrha koda – da li nam to uopste treba

Ako neke izmene koje se tu nalaze u
kartici Changes, smatramo da nisu deo tog merge requesta, imamo opciju da dodamo komenta.

17
Q

Kako definisemo aliase?

A

git config –global alias.ci “komande”

Primer:
git config –global alias.hist “log –pretty=format:’%h %ad | %s%d [%an]’ –graph –date=short”

Pozivamo je sa git hist

18
Q

Bare repozitorijum

A

Repozitorijum koji je bare nema nijednu granu koja je aktivna (checkout) i ne treba da se vrše izmene na ovom repozitorijumu. Ovaj repozitorijum možemo posmatrati kao repozitorijum koji ima samo .git sadržaj. Možda deluje beskoristan, ali ovaj tip repozitorijuma je neophodan i služi kao posrednik u komunikaciji između više non-bare repozitorijuma

19
Q

Šta je gitflow?

A

Postoje dve glavne glavne grane:
- master grana na kojoj se nalazi produkcioni kod. Ovde se ne dešavaju promene dok neko ne pusti kod u produkciju.

  • develop grana je za kod koji je trenutno u izradnji. Funkcionalnost i popravke grešaka se ovde spajaju. Na ovoj grani ima više gužve.

Pored ove dve grane postoje i pomoćne:
- feature služi za implementaciju nove funkcionalnosti. Na ovaj način se odvajamo od develop grane dok se vrši implementacija nove funkcionalnost i kasnije se vraćamo na develop granu kada se ta implementacija završi. Svi delovi koda koji su i dalje u izradnji se trenutno nalaze u nekoj feature grani.
- release služi za kod koji je dovoljno testiran za produkciju. Ovde se ne vrše implementacije novih funkcionalnost, već se samo ispravljaju neke sitne greške u poslednjim trenutku ili slično. Grana release se pravi u okviru develop grane i spaja se sa develop i master granom. Razlog za ovu granu je mogućnost da se gleda kod za produkciju, dok se na develop grani ne prestaje sa implementacijom novih funkcionalnosti.
- hotfix služi za ispravke koda u trenutku kada je on već pušten u produkciju. Ova grana se pravi nad master granom, gde se vrše potrebne ispravke i onda se spaja sa master