Git conventions for developers - PSW-2020-ORG4/HealthcareSystem GitHub Wiki

Konvencije organizacije

Označavanje Trello kartica

Potrebno je da sve Trello kartice / korisničke priče budu jedinstveno označene, pa je ono što mi predlažemo da svaki tim označi svoje kartice (mi ćemo za to koristiti običnu numeraciju od 1 pa dalje), i da se ispred toga doda jedno ili dva slova za oznaku kom timu pripadaju (npr. d za DevOps, w za Web aplikaciju, g za Grafički editor, i a za Integracione adaptere). To znači da bi sve oznake kartica imale format [oznaka tima][interna oznaka], pa će na primjer naše za DevOps biti d1, d2, d3, i tako dalje.

Imenovanje grana

Grane imenovati u formatu prefiks-oznaka-opis, gdje je:

  • Prefiks neka od mogućih riječi:
    - feature za rad na funkcionalnosti
    - bugfix za bugove
    - hotfix za jako hitne ispravke
    - refactor za refaktorisanje
    - documentation za dodavanje dokumentacije
    Po potrebi možemo dodati još prefiksa (npr. za refaktorisanje, dodavanje testova ili tako nešto).
  • Oznaka je oznaka Trello kartice na koju se grana odnosi
  • Opis ima maksimalno par riječi, obavezno na engleskom

Pisati čitavo ime grane malim slovima, i kao separator koristiti -.

Pisanje commit message-a

Commit message pisati u formatu tip[oznaka]: opis, gdje je:

  • Tip nešto od:
    - feat - izmjena ili dodavanje koda koji direktno doprinosi nekoj funkcionalnosti
    - fix - rad na ispravci buga
    - refactor - refaktorisanje koda
    - style - stilske ispravke, formatiranje koda i slično
    - test - izmjena ili dodavanje testova
    - chore - izmjena pomoćnih fajlova, kao što je gitignore i slične stvari
    - merge - za merge commitove (pošto smo odlučili da ne koristimo rebase)
    - gui - za estetske izmjene na frontendu
  • Oznaka je oznaka Trello kartice na koju se commit odnosi (ista oznaka kao oznaka grane na kojoj se commit nalazi)
  • Opis je kratak opis napravljenih izmjena, obavezno na engleskom

Koncept je baziran na: https://dev.to/puritanic/how-are-you-writing-a-commit-message-1ih7?fbclid=IwAR2_E7Uvl4Ps12xPuFhI1nZXnxK2FQc9Xn34CXsD1XtJ_lAQaQonwa8kzuM

Definisanje cilja PR-a

Kada otvarate pull request, pozeljno je dati dobar opis sta je cilj tog pull request-a. Odnosno sta zelite time da postignete i koji je to trenutak kada ste to postigli.


image

Git instrukcije

Pisane instrukcije

U instrukcijama je kod naredbi koje treba da se izvrše na tačno određenoj grani napisano ime grane u zagradi ispred naredbe (onako kako Git Bash označava u promptu na kojoj grani se nalazite). Na primer, ako je napisano (develop) git fetch to znači da treba da se izvrši naredba git fetch na grani develop.

Kloniranje repozitorijuma
  1. Klonirati repozitorijum:

    git clone https://github.com/PSW-2020-ORG4/HealthcareSystem.git 
  2. Prebaciti se u folder u kom se nalazi repozitorijum

  3. Napraviti develop granu:

    git checkout develop

    ili

    git checkout -b develop origin/develop
Pravljenje nove grane
  1. Pozicionirati se na develop:

    git checkout develop
  2. Napraviti novu granu:

    (develop) git checkout -b nova-grana
  3. Poslati novu granu na repozitorijum na GitHubu:

    (nova-grana) git push -u origin nova-grana


Nije moguće otvoriti pull request čim se napravi grana jer neće još imati razlika u odnosu na develop, ali treba otvoriti pull request što je ranije moguće. Dobar trenutak za to je posle pravljenja prvog commita.

Pravljenje commitova
  1. Provjeriti da li ste na tačnoj grani, i ako niste prebaciti se na nju:

    git checkout neka-grana
  2. Napraviti izmjene u kodu

  3. Dodati fajlove u staging area. Ako se dodaju svi fajlovi, koristiti

    (neka-grana) git add . 

    Može se koristit i git add sa drugim argumentima za pojedinačno dodavanje fajlova.

  4. Napraviti commit, pri čemu commit message treba da bude u skladu sa konvencijom:

    (neka-grana) git commit -m "commit message"
  5. Poslati izmjene na repozitorijum na GitHubu:

    (neka-grana) git push

    ili

    (neka-grana) git push origin neka-grana

Ukoliko to nije ranije urađeno, ovo je dobar trenutak za otvaranje pull requesta za granu. Ako je već napravljen pull request, na njemu će se moći vidjeti i novi commit (i ako je ranije već odrađen review pull requesta i dat approval, poništiće se approval i svakako ponovo raditi review).

Otvaranje pull requesta

Jedan mogući način za otvaranje pull requesta je:

  1. Ući u repozitorijum na GitHubu
  2. Izabrati karticu Pull requests
  3. Ići na New pull request
  4. Postaviti tako da je base develop, a compare grana koja treba da se spoji u develop
  5. Ići na Create pull request
  6. Srediti ostale postavke
  7. Ići na Create pull request
  8. Kreirani pull request povezati sa karticom na Trello boardu preko GitHub powerupa
Spajanje grane / zatvaranje pull requesta

Kada završite izmjene na grani, ona se spaja u develop opcijom Merge pull request na njenom pull requestu na GitHubu. To je moguće uraditi pod sledećim uslovima:

  1. Grana je up to date sa developom
  2. Prolaze testovi (kada se napravi Continuous Integration)
  3. Ima minimalno dva odobravajuća reviewa od DevOps tima
  4. Niko nije tražio izmjene na pull requestu (opcija Request changes pri pravljenju reviewa) - ukoliko je neko tražio izmjene, neće se moći spojiti pull request dok ta osoba ne stavi approval, ili neko iz DevOps tima odbaci zahtjev za izmjenama

Kada je zatvoren pull request, grana na repozitorijum na GitHubu će se automatski obrisati. Granu na lokalnom repozitorijumu možete obrisati sa:

git branch -d ime-grane
Povlačenje izmjena sa developa na drugu granu

Kako bi se mogao zatvoriti pull request potrebno je da grana bude up to date sa developom, odnosno da sve izmjene sa developa budu već intergrisane u granu na kojoj se radi. Prvo je potrebno povući izmjene sa develop na GitHubu na develop granu u lokalnom repozitorijumu:

  1. Prebaciti se na develop

    git checkout develop
  2. Povući izmjene

    (develop) git pull

    ili ako želite više opcija, ono što zapravo radi pull je sledeće:

    (develop) git fetch
    (develop) git merge origin/develop

    Zatim je potrebno spojiti lokalnu develop granu u granu na kojoj radite:

  3. Prebaciti se na granu na kojoj se trenutno radi:

    git checkout neka-grana
  4. Spojiti develop:

    (neka-grana) git merge develop -m "commit message" (commit message napisati u skladu sa konvencijom!)


    Ovo je jedini korak u workflow-u u kom može doći do konflikta. Ukoliko se desi konflikt, može se vidjeti u kojim je fajlovima pomoću naredbe git status ili kada se otvori Visual Studio. Potrebno je riješiti konflikt, a zatim commitovati napravljene izmjene na uobičajeni način (za tip u commit message-u pri rješavanju konflikta staviti merge).

Generalno korisne naredbe
  • git fetch
    Osjvježava informacije koje lokalni repozitorijum ima o repozitorijumu na GitHubu (koje sve grane postoje na GitHubu, na kom su commitu, i slično)
  • git status
    Prikazuje trenutno stanje grane na kojoj se izvrši, npr. da li je grana up to date sa granom na GitHubu koja joj odgovara (ova informacija može biti netačna ako nije urađen fetch!), koji su fajlovi izmjenjeni, da li su dodati u staging area, koji su fajlovi u konfliktu ako se radi spajanje, i slično.
  • git branch
    Za prikazivanje i rad sa granama, neki od korisnih dodatnih argumenata za prikazivanje grana su:
    -a - prikazuje i remote grane, po defaultu će prikazati samo lokalne
    -vv - prikazuje više detalja o granama, npr. koju granu sa GitHuba prate, na kom su commitu, i slično

Video instrukcije

Feature branch & pull request

https://youtu.be/fHNL-1DjgAs

Merge feature branch with develop & code review
⚠️ **GitHub.com Fallback** ⚠️