Git in GitHub

Git in GitHub#

Git je program za sledenje sprememb v datotekah, GitHub pa je ena izmed storitev, ki ga uporablja. Za jasno uvodno predstavitev uporabnosti sistema priporočam ogled posnetka What is GitHub.

Git#

Program Git je bil primarno razvit za uporabo programerjev, ki sodelujejo pri razvoju nekega programa, je pa tudi splošno uporaben v različnih drugih sodelovalnih okoljih. Ustvaril ga je Linus Torvalds in sicer pri razvoju jedra operacijskega sistema Linux (da je pri razvoju lahko sodelovalo več ljudi), kasneje pa je bil program dodelan z razširjeno funkcionalnostjo.

Ključne lastnosti programa Git so enostavna uporaba, hitrost, skrb za integriteto podatkov ter podpora za distribuiran nelinearen tok dela.

Primer uporabe#

Osnovno delovanje sistema lahko ilustriramo na (izmišljenem) primeru razvoja majhnega programa, ki iz temperaturnega senzorja domače vremenske postaje vsako uro prebere temperaturo in jo zapiše v novo vrstico tabele. Recimo, da trenutna verzija programa dobro deluje in popravki niso potrebni. Čez čas pa ugotovimo, da nam samo temperatura ne zadostuje in bi zraven vsakega odčitka imeli še podatek o jakosti svetlobe ter hitrosti in smeri vetra (ustrezni senzorji so del vremenske postaje). O ideji povemo prijatelju, ki reče “Super ideja, še lepše pa bi bilo, če bi se podatki izrisovali na diagramu za tekoči mesec, ki bi se ob vsaki novi meritvi osvežil!”. Prijatelj se pridruži našemu projektu, a ker živi na drugem koncu države ni ravno praktično, da programiramo skupaj. Tako mu pošljemo kopijo izvorne kode programa, nato pa jo vsak od naju razvijava ločeno. Mi se trudimo z implementacijo branja dodatnih senzorjev, prijatelj pa z izrisom podatkov. Ker v tabelo zdaj beležimo dodatne podatke si jo zamislimo nekoliko drugače, a to pozabimo sporočiti prijatelju. No, tudi prijatelj ima neko svojo idejo, kako bi naj ta tabela izgledala, zato po svoje spremeni del kode, ki jo generira. Ko oba zaključiva moramo kodo sestaviti, takrat pa - ojoj! - ugotovimo, da zaradi različnih sprememb istega dela kode to ne bo enostavno.

Tovrstnim težavam se lahko izognemo tako, da izvorno kodo naložimo na nek strežnik, od koder jo lahko pridobimo tako mi kot naš prijatelj. Na strežniku teče program git, prav tako pa imamo mi in pa prijatelj tak program nainstaliran na svojih računalnikih. Osnovno oz. prvotno obliko kode za vsak slučaj pustimo pri miru (saj vemo, da deluje, strah pa nas je, da jo pokvarimo) - tej verziji rečemo master ali main. Za potrebe nadaljnjega razvoja naredimo na strežniku kopijo, ki se imenuje veja ali branch, ki jo poimenujemo npr. razvoj. Kopijo si mi in pa prijatelj s pomočjo programa git prenesemo na računalnik (operacija fetch). Kodo nato razvijamo in vsakič (redno!) spremembe zabeležimo (operacija commmit) ter jih zlijemo (operacija merge) in prenesemo (operacija push) v našo razvojno vejo razvoj. Naš prijatelj lahko tem spremembam sledi (prav tako kot mi si lahko tudi on prenese kopijo naše razvojne veje) ter podobno kot mi dela spremembe v tej isti veji. Njegovih sprememb smo deležni tudi mi (in obratno), saj z operacijo pull sinhroniziramo lokalno kopijo s tisto na spletu (pull = fetch + merge). Ko smo s končnim izdelkom, ki vsebuje vso želeno funkcionalnost, zadovoljni in preverjeno deluje, lahko vse to zlijemo z glavno vejo.

Dodatne informacije#

Več o Git lahko preberete med drugim na Wikipediji. Na voljo je tudi odlična spletna knjiga, celo v slovenščini - knjiga Pro Git, ki je na uradni strani projekta Git. Pomembne lastnosti najbolje ilustrirajo videoposnetki:

GitHub#

GitHub (pravzaprav GitHub Inc.) je podjetje, ki omogoča spletno gostovanje za programske in druge pakete, temelji pa na programu Git. Od leta 2018 je podružnica Microsofta. Več o zgodovini je zapisano na Wikipediji. Je ena izmed večjih tovrstnih storitev, obstajajo pa seveda tudi alternative, npr. GitLab in SourceForge. Če ne želimo uporabljati nobenega od obstoječih (pogosto komercialnih) ponudnikov si lahko postavimo tudi svoj lasten strežnik.

Osnovni koncepti so enaki kot pri Git. Posamezen projekt imenujemo repozitorij (repository), ki ga naslovimo kot uporabnisko_ime/ime_repozitorija Na primer, repozitorij, ki vsebuje program PyMOL za vizualizacijo struktur makromolekul, lahko naslovimo kot schrodinger/pymol-open-source, na strežniku GitHub pa je dostopen na naslovu stila https://github.com/uporabnisko_ime/ime_repozitorija (v tem primeru torej schrodinger/pymol-open-source). Repozitorije si lahko ogledujemo, komentiramo ipd. kar v spletnem brskalniku, prav tako si lahko od tam prenesemo cel repozitorij ali njegove dele (tudi v obliki datoteke zip). Repozitorijev drugih ljudi, če seveda nismo člani projektne skupine, ne moremo spreminjati, lahko pa si jih skloniramo (operacija clone). Za interakcijo z GitHub sicer primarno uporabljamo lokalno nameščen program git, obstaja tudi program z grafičnim vmesnikom GitHub Desktop.