Projektihaldus ning õpetused git ja githubi kasutamiseks

Sisukord (projektihaldus)
Üldine ülesehitus Issued
Branchid
Mis on "branch"?
Mis on "pull request"?
Merge conflict
Sisukord (õpetused)
Repo loomine ning alla laadimine (clone)
Teiste muudatuste alla laadimine (pull) (VSCode)
Teiste muudatuste alla laadimine (pull) (terminal)
Muudatuste avalikustamine (commit ja push) (VSCode)
Muudatuste avalikustamine (commit ja push) (terminal)
Uue branchi loomine (VSCode)
Uue branchi loomine (terminal)
Branchide vahel liikumine (VSCode)
Branchide vahel liikumine (terminal)
Lokaalse branchi kustutamine (VSCode)
Lokaalse branchi kustutamine (terminal)
Pull requesti loomine ja vastu võtmine / lahendamine
Merge conflicti lahendamine (VSCode)
Issue loomine githubis

Projektihaldus

Üldine ülesehitus

Issued

  • Issue peab kirjeldama, mis teha on vaja.

  • Issue maht ei tohi olla liiga suur (kui on liiga suur, siis tükeldada väiksemateks issuedeks).

  • Issue saab sulgeda keegi teine peale autori.

  • Issue peaks olema seotud branchiga, githubis saab uut issuet luues, luua ka kohe branchi.

  • Issued tuleks luua ette, nt iga nädala alguses, ning iga nädal siis neid lahendada.

  • Alguses ei pea issuel assignee'd olema, kuid kui hakkad issuega tegelema, siis lisa iseennast asignee'ks (või keegi teine lisab sinu).

  • Issudel võiks olla ka labelid (neid võib ise ka juurde teha).

  • Issue juures võiks olla kirjas ka kui suur on ennustatav ajakulu (estimate).

Branchid

  • Iga issue kohta on ka eraldi branch.

  • Branch peab olema seotud issuega (Issue number peab olema kuskil branchi nimes olemas. Hea on kasutada automaatslet genereeritud branchi nimesid).

  • Main / master branchi tohib ainult mergida (ehk sinna niisama pushida ei tohi).

  • Pull requesti viib läbi ning review'ib keegi teine, mitte pull requesti autor.

Mis on "branch"?

Branch on uus või eraldi versioon põhi repost (ehk main / master branchist). Branche kasutatakse selleks, et iga meeskonnaliige saaks oma asjade kallal tegeleda. Kui mitu inimest tegeleks samas branchis korraga siis tekiksid konfliktid, mida peaks väga tihti lahendama. Nt üks muutis muutuja nime, kuid teine kes ka seda muutujat kasutas, ei muutnud ning selle tõttu tekivad errorid. Branche seeb ühendada mergeides, ehk üks branch lisatakse teisele branchile juurde. Selleks et mergida peab enne tegema pull requesti, selleks et keegi saaks sinu koodi üle vaadata ning vajadusel ka tagasisidet anda enne põhi branchi mergemist.

Mis on "pull request"?

Pull request on sooviavaldus uuendada tavaliselt main branchi (või tagasi võtta muudatused. Võib olla ka teiste branchide vahel kui ainult main ja mingi muu).

Merge conflict

Merge conflict tekib juhul kui ühes failis tehakse samal ajal muudatusi (mitte ajaliselt, vaid branchide mõttes). Näiteks on meil 3 branchi: main, b1 ja b2. Ning kõigi on üks fail 'README.md', mille sisu algselt on

This is main branch.

Ütleme et b1-s muudetakse see tekst selliseks:

This is b1 branch.

Ning peale muutmist mergitakse main branchi. Ehk nüüdseks oleks main branchis samasugune tekst nagu b1-s.

Nüüd muudame teksti b2-s:

This is b2 branch.

Kui nüüd proovida mergida b2 branchi main branchi, siis tekib merge conflict'i, sest samaaegselt on kahes erinevas branchis muudetud sama teksti. Selleks et merge läbi viia tuleb valida, kas jätta alles b1-s tehtud muudatused või b2-s tehtud muudatused või lisada mõlemad muudatused kokku (nagu näidatud allpool).

This is b1 branch.
This is b2 branch.

See, kuidas konflikte lahendada, on kirjas siin.

Õpetused

Õpetused on tehtud VSCode'iga, võib ka muid rakendusi kasutada, kuid siis on tegevused natuke teised.

Repo loomine ning alla laadimine (clone)

Loo GitHubi konto ning loo uus repo (tee avalikuks, siis saavad ka tiimikaaslased repot vaadata, tiimi peale on üks repo).
Selleks et repo endale arvutisse alla laadida peab kõigepealt alla laadima ning installima git'i: https://git-scm.com/downloads.
Kõige lihtsam on alla laadida mitte portable, sest muidu on võib olla vaja PATH-i lisada see portable programm.

  • Ava cmd (Win + r ja kirjuta cmd) ning liigu sinna kausta (käsuga cd), kuhu sa oma repo tahad alla laadida (siin näites Desktop).

  • Kui oled õiges kaustas, siis sisesta käsureale: git clone [repo link], kus repo lingi saad githubis code nupu peale vajutades või aadressirealt. Nüüd peaks olema repo olemas ning võid repo avada kas vscode'i või muu programmiga. ../../_images/repo_alla_laadimine.png

Teiste muudatuste alla laadimine (pull) (VSCode)

  • Mine Source control alla

  • Vajuta "kolm punkti" ning vali "pull"

    Pilt

    ../../_images/pullimine_vscode.png

  • Nüüd laetakse kõik muudatused githubist alla.

Teiste muudatuste alla laadimine (pull) (terminal)

  • Ava terminal ning mine enda projekti alla

  • Kirjuta git pull ../../_images/pullimine_terminal.png

Muudatuste avalikustamine (commit ja push) (VSCode)

Selleks et teised sinu tehtud muudatusi näeks, tuleb need üles laadida githubi.

  • Mine Source control alla

  • Kirjuta mingi sõnum, mis kirjeldab sinu muudatusi (commit message)

  • Vajuta Commit ning Yes ../../_images/pushimine_vscode_1.png

  • Vajuta Sync Changes ning Ok ../../_images/pushimine_vscode_2.png

Muudatuste avalikustamine (commit ja push) (terminal)

  • Lisa failid, mida tahad commitida käsuga git add [failid]. Kui panna failide asemele *, siis valitakse kõik failid, milles on muutused olnud.

  • Loo commit ning pane ka commit message käsuga git commit -m "[sõnum]", kus sõnum on muudatuste kirjeldus

  • Pushi see commit kasutades käsku git push. ../../_images/pushimine_terminal.png

Uue branchi loomine (VSCode)

Kõige lihtsam on branch luua githubis issuega ning peale seda teha lokaalselt git pull ning liikuda uue branchi peale. Pullimise kohta loe siit

Olenevalt sellest, mis branchis sa hetkel oled, siis selle järgi tehakse ka uus branch (kõige mõistlikum on teha main'ist uus branch).
Kui aga on vaja luua ainult uus branch, siis saab seda teha minnes Source Controli alla ning vajuta "kolme punkti peale", vali "branch" ja siis "Create Branch". ../../_images/branchi_loomine_vscode_1.png

Vali branchile nimi ning uus branch ongi loodud. ../../_images/branchi_loomine_vscode_2.png

Uue branchi loomine (terminal)

  • Kõigepealt vali branch, mille soovid uue branchi aluseks võtta (enamasti on see main).

  • loo uus branch käsuga git branch [branchi nimi]

  • Liigu uude branchi käsuga git checkout [branchi nimi] ../../_images/branchi_loomine_terminal.png

Branchide vahel liikumine (VSCode)

  • Vaata, et sul oleks kõige uuem versioon repost, selleks mine source control alla ning vajuta "kolme punkti" peale ning vali "pull". ../../_images/branchide_vahel_liikumine_vscode_1.png

  • Selleks, et liikuda branchide vahel, vajuta alumisel real hetkel olevat hetkese branchi nime ning vali branch kuhu liikuda tahad (need mis origin/-iga algavd on need, mis on githubi serveris, ülejäänud branchid on allalaetuna lokaalselt arvutis). ../../_images/branchide_vahel_liikumine_vscode_2.png ../../_images/branchide_vahel_liikumine_vscode_3.png

Branchide vahel liikumine (terminal)

  • Ava terminalis enda proejekti kaust.

  • Sisesta git checkout [baranchi nimi], kus [branchi nimi] on branch, mida sa vaadata tahad. ../../_images/branchide_vahel_liikumine_terminal.png

Lokaalse branchi kustutamine (VSCode)

Enamasti on vaja seda teha siis kui branch on githubist kustutatud / mergeitud ning enam seda ei kasutata.

  • Mine Source Control alla

  • Vali "kolm punkti"

  • Vali Branch ja siis Delete branch ... ning vali millise branchi sa ära kustutada tahad

Lokaalse branchi kustutamine (terminal)

  • Sisesta git branch -d [branchi nimi]

Pull requesti loomine ja vastu võtmine / lahendamine

Pull requesti loomine

Fail main branchis
../../_images/pull_requesti_loomine_ning_mergimine_1.png

Fail b1 branchis
../../_images/pull_requesti_loomine_ning_mergimine_2.png

Fail b2 branchis
../../_images/pull_requesti_loomine_ning_mergimine_3.png

Pull requesti loomine (b1 -> main)
../../_images/pull_requesti_loomine_ning_mergimine_4.png

Vali branchid, millega soovid merge requesti teha.
../../_images/pull_requesti_loomine_ning_mergimine_5.png

Vajuta Create pull request
../../_images/pull_requesti_loomine_ning_mergimine_6.png

Lisa siia ka mingi ülevaatlik kirjeldus, mis antud branchiga lõid / muutsid.
../../_images/pull_requesti_loomine_ning_mergimine_6.5.png

Pull requesti vastu võtmine / lahendamine

Lisa ennast revieweriks ja assignee'ks ning vaata kood üle, proovi kas töötab, vajadusel küsi mis mingi asi tegi või soovita muudatusi.
../../_images/pull_requesti_loomine_ning_mergimine_7.png

Vajuta Confirm Merge.
../../_images/pull_requesti_loomine_ning_mergimine_8.png

Ning kustuta ka vana branch ära ning märgi antud branchiga seotud issue lahendatuks.
../../_images/pull_requesti_loomine_ning_mergimine_9.png

Merge conflicti lahendamine (VSCode)

See on tehtud eelneva merge conflicti ning pull requesti loomise ja vastuvõtmise alusel.

  • Merge conflict githubis ../../_images/merge_conflict_1.png ../../_images/merge_conflict_2.png ../../_images/merge_conflict_3.png

  • Kõigepealt pull-i, selleks et kõik branchid oleksid uuendatud.

  • Liigu branchi, kuhu tahad mergida (main'i)

  • Mine Source Controli alla ning vali "kolm punkti", vali "branch", vali "merge". ../../_images/merge_conflict_3.5.png

  • Vali branch, kust sa tahad muudatused maini liikutada. ../../_images/merge_conflict_3.75.png

  • Vaata millised failid on konfliktis (explorer vaates on erinevat värvi ja hüüumärk on kõrval) ning ava need. ../../_images/merge_conflict_4.png

  • Siis vali Resolve in Merge Editor ning nüd tekib vaade, kus üleval vasakul on uue branchi muudatused, üleva paremal on main branchi muudatused ning all on see mis lõpuks main branchi läheb. ../../_images/merge_conflict_5.png

  • Kahe ülemise vaate pealt saad valida Accept incoming või Accept Current. Vajadusel saad lõplikku osasse manuaalselt ka kirjutada vajalikke muudatusi. Vajutades Accept Current
    ../../_images/merge_conflict_7.png

    Vajutades Accept incoming
    ../../_images/merge_conflict_8.png

  • Salvesta see fail (kui kõik merge conflictid pole veel lahendatud, siis ära veel vajuta Complete Merge vaid lahenda ka ülejäänud merge conflictid ära).

  • Kui kõik merge conflictid on lahendatud, siis vajuta Complete Merge ning avalda uuendused (Sync Changes - see pull-ib ning siis push-ib).

    Peale Complete Merge vajutamist
    ../../_images/merge_conflict_9.png

    Peale commiti tegemist
    ../../_images/merge_conflict_10.png

    Pilt sellest, milline näeb git-i puu välja peale merge'e (loodud VSCode extensioniga "Git Graph").
    ../../_images/merge_conflict_12.png

  • Peale seda võid minna GitHubi ning vana branchi ära kustutada.

    Hall nupp lilla kasti sees Delete branch
    ../../_images/merge_conflict_13.png

Issue loomine githubis

  • Mine githubis Issue'de alla

  • Vali New Issue ../../_images/issue_ja_branchi_loomine_1.png

  • Lisa Issuele pealkiri, kirjeldus ja ajaline pikkus (hinnang), võid lisada ka labeleid. ../../_images/issue_ja_branchi_loomine_2.png

Järgmisi osasid ei pea kohe peale issue tegemist tegema. Võib ka nii teha et iga nädala või kahe nädala alguses loote issued valmis ja siis igaüks vaib endal issue, mida ta lahendama hakkab. Siis kui jõuab hetk kätte, mil alustad lahendamist, alles siis lood uue branchi ning paned ennast issues "assignee"-ks. (siis on ka uuem kood ilmselt main branchis, muidu kui teed kõik branchid valmis muutub nendes branchides kood juba liiga vanaks)

  • Loo juurde ka branch (all paremal Developement all Create a branch) ../../_images/issue_ja_branchi_loomine_3.png

  • Vali branchile nimi (automaatselt genereeritud sobib ka (peaasi et isse number sees oleks ja mingil viisil oleks standardne)) ../../_images/issue_ja_branchi_loomine_4.png

  • Nüüd on branch loodud ning saad loodud branchis issuet lahendama ../../_images/issue_ja_branchi_loomine_5.png