Download presentation
Presentation is loading. Please wait.
Published byFanny Atmadja Modified over 6 years ago
1
Jakub Šimko jakub.simko@stuba.sk
Metódy inžinierskej práce Prednáška 7: Verziovanie zdrojových kódov (Git) Jakub Šimko
2
Organizačne k predmetu:
Striedanie cvičení bude pokračovať ako keby nebola týždeň pauza... Teda týždeň po „prázdninách“ prídu na cvičenie študenti NEPÁRNYCH TÝŽDŇOV Ešte inak: medzi ostatným a nasledujúcim cvičením bude mať každý 3 týždne.
3
Dnes 17:45 – pokec s prodekanmi
4
Zo spätnej väzby Prečo v študijnom programe Internetové technológie nie je predmet Umelá inteligencia. -- iný profil absolventa -- UI je skôr prehľadový predmet Aké možnosti zamerania sa na špecifickú oblasť ponúka fakulta, aby som sa nemusela venovať iným predmetom, ku ktorým nemám vzťah Prečo sa vyhýbam oblasti bezpečnosti? Dalo by sa vytvoriť nejaký test, ktorý by overil znalosti z gitu a keď by sme ním úspešne prešli, nemuseli by sme robiť zadanie GIT refaktoring? bit.ly/mip-dotaznik
5
Zo spätnej väzby Z prednášky mi vychádza to, že kódenie/programovanie je len malá časť z toho byť informatikom. Keď je človek skvelý programátor, neznamená to, že je skvelý informatik, domnievam sa správne? Vychádza to z toho, že kódenie tvorí iba malú časť z tých "skillov" a byť informatikom hlavne znamená myslieť ako informatik? bit.ly/mip-dotaznik
6
Zo spätnej väzby Viaceré argumenty v prospech nahrávania prednášok Chápem, že čakáte od nás trocha samostatnosti a že poskytovanie nadmerného množstva informácii sa považuje za vedenie za ručičky, ale prečo sa považuje poskytovanie informácii, ktoré by NEBOLI nové informácie, a ktorých zopakovanie/(osvojenie) by záviselo len na jednotlivcoch, za vedenie za ručičky? Z môjho pohľadu prednášky dávajú veľmi málo (10%), cvičenia(40%) a samoštúdium zvyšných 50%. Tým, že by sa prednášky nahrávali a existovala by možnosť si ich spätne pozrieť, pozastaviť a urobiť si rekapituláciu by sa percentá "boostli" na optimistických 30%. prečo na top školách (Harvard, MIT,...) bežne prednášky nahrávajú a sprístupňujú bit.ly/mip-dotaznik
7
Zo spätnej väzby V celku dosť pozitívnych ohlasov na Jaroslava Dušeka -- tlak byť úspešná/ý Viaceré podnety na tému prednášky o histórii (keep it up) Nebolo by logickejšie dať dotazník o stave štúdia vyšším ročníkom? (vedia dať lepšie spätnú väzbu) bit.ly/mip-dotaznik
8
Zo spätnej väzby Github študentský balík bit.ly/mip-dotaznik
9
Appka týždňa SoloLearn (navrhli dvaja z vás) bit.ly/mip-dotaznik
10
ktorý uchováva verzie zdrojových kódov
Source control je softvér, ktorý uchováva verzie zdrojových kódov vo vzdialenom a zdieľateľnom úložisku Hovorí vám niečo tento pojem? Prípadne tieto názvy? Príklady: Git, Mercurial, SVN, Bazaar, ... bit.ly/mip-dotaznik
11
Source control používame kvôli:
Zálohovanie vašej práce Prístup k predchádzajúcim verziám (neoceniteľné ak spravíte chyby) Paralelná práca viacerých programátorov (viete oddeliť prácu pomocou vetvenia) (viete, čo kto spravil) Riadenie tvorby softvéru (väzba kódu na úlohy) (podpora nasadzovania softvéru – prostredia) Pointa: nebavíme sa o krátkych programčekoch bit.ly/mip-dotaznik
12
Ideme sa baviť o Gite Naozaj hocikedy ma zastavte, spýtajte sa. Zopakujem...
13
Git je program, ktorý ovládate cez konzolu (a.k.a príkazový riadok)
Grafické nadstavby existujú. Ale nepoužívajte ich kým veciam neporozumiete!
14
Je výhodné používať Git v rámci Github, Bitbucket či ďalších portálov
Viac „vizuálnej podpory“ Ďalšie nástroje na organizáciu vašej práce Prístup k obrovskému množstvu projektov druhých bit.ly/mip-dotaznik
15
Bežný scenár pri práci s Gitom má 2 kroky:
1. Urobím nejakú zmenu v kóde Napr.: pridám vypisovanie chýb A uložím súbor Uchovám si verziu. Zadám do konzoly: git commit –a –m “added error logging”
16
Výrazom „commit“ sa v bežnom IT slangu označuje viacero vecí
akt odovzdania verzie „Počkajte, idem s vami na obed, len to ešte komitnem“ verzia ako taká „Tú premennú som definoval v komite zo štvrtka.“ príkaz na odovzdanie verzie ako taký git commit –a –m “opis zmeny” commit = odovzdanie = check-in bit.ly/mip-dotaznik
17
Bežný scenár pri práci s Gitom má 2 kroky:
1. Urobím nejakú zmenu v kóde Napr.: pridám vypisovanie chýb 2. Uchovám si verziu. Zadám do konzoly: git commit –a –m “error logging added” Samozrejme, viaceré veci sa museli stať predtým
18
Na úplnom začiatku treba inicializovať repozitár
Zadám do konzoly: git init (Toto spravím v adresári, kde mám svoj kód) repozitár (repository) = úložisko
19
Každý nový súbor treba explicitne pridať aj do Gitu
1. Pridám nový súbor Napr.: mám nový súbor foo.c 2. Poviem Gitu, aby tento nový súbor sledoval Zadám do konzoly: git add foo.c 3. Uchovám si verziu. git commit –m “math helpers added”
20
Potrebujete účet na GitHub
Skúsme to v živej konzole init add commit status log rm –cached rm checkout <file> push Potrebujete účet na GitHub Keď veci skúšate prvý krát, postretne vás pár maličkostí...
21
Mimochodom... Namiesto dvojice príkazov git add [súbor] git commit –m “opis zmeny” Často stačí použiť git commit –a –m “opis zmeny” (zafunguje v prípade, že sme súbor aspoň raz pomocou git add pridali) bit.ly/mip-dotaznik
22
Pauzu?
23
Čo sa v tom Gite vlastne deje?
25
Git: ešte raz to isté, ale inak (fakt chcem aby bol váš knowledge gain čo najvačší)
bit.ly/mip-dotaznik
26
Pracovný adresár foo.c bit.ly/mip-dotaznik
27
Pracovný adresár float whatever(float a) { } foo.c bit.ly/mip-dotaznik
28
Pracovný adresár foo.c float whatever(float a) { float b; b = a * 10;
} foo.c bit.ly/mip-dotaznik
29
Pracovný adresár foo.c float whatever(float a) { float b; b = a * 10;
b = sqrt(b); return b; } foo.c bit.ly/mip-dotaznik
30
Pracovný adresár foo.c float whatever(float a) { float b; b = a * 10;
b = b * b; return b; } foo.c bit.ly/mip-dotaznik
31
Pracovný adresár foo.c float whatever(float a) { float b; b = a * 10;
b = b * b; printf(“Woo hoo”); return b; } foo.c bit.ly/mip-dotaznik
32
Takýto postup asi nie je dobrý
Neviem sa spätne dostať k zmenám Nie som chránený voči strate kódu Nemám prostriedky efektívne svoj kód integrovať s inými ľuďmi bit.ly/mip-dotaznik
33
Vytvorenie nového lokálneho úložiska
Pracovný adresár Lokálne úložisko verzií git init Vytvorenie nového lokálneho úložiska float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c
34
Pridanie súboru foo.c „do sledovania“
Pracovný adresár Lokálne úložisko verzií git add foo.c Pridanie súboru foo.c „do sledovania“ float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c staged indexed
35
“Lorem ipsum dolor sit”
Pracovný adresár Lokálne úložisko verzií git commit –m “Lorem ipsum dolor sit” Odovzdanie snímky (snapshot) „sledovaných“ súborov float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c 1 Lorem ipsum dolor sit staged indexed
36
Zmeny v súbore foo.c Pracovný adresár Lokálne úložisko verzií
float whatever(float a) { float b; b = a * 10; b = b – a; b = b * b; return b; } foo.c float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c 1 Lorem ipsum dolor sit indexed Zmeny v súbore foo.c
37
“sed do eiusmod tempor”
Pracovný adresár Lokálne úložisko verzií git add foo.c git commit –m “sed do eiusmod tempor” float whatever(float a) { float b; b = a * 10; b = b – a; b = b * b; return b; } foo.c float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c 1 Lorem ipsum dolor sit float whatever(float a) { float b; b = a * 10; b = b – a; b = b * b; return b; } foo.c 2 Sed do eiusmod tempor staged indexed Odovzdanie ďalšej verzie
38
Lokálne úložisko verzií
Pracovný adresár Lokálne úložisko verzií float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c 1 Lorem ipsum dolor sit float whatever(float a) { float b; b = a * 10; b = b – a; b = b * b; return b; } foo.c float whatever(float a) { float b; b = a * 10; b = b – a; b = b * b; return b; } foo.c 2 Sed do eiusmod tempor indexed
39
Analogicky odovzdávame ďalšie verzie
Pracovný adresár Lokálne úložisko verzií float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c 1 Lorem ipsum dolor sit float whatever(float a) { float b; b = a * 10; b = b – a; b = b * b; return b; } foo.c 2 Sed do eiusmod tempor float whatever(float a) { float X; X = a * 10; X = X – a; X = X * X; return b; } foo.c float whatever(float a) { float X; X = a * 10; X = X – a; X = X * X; return b; } foo.c 3 beatae vitae dicta indexed Analogicky odovzdávame ďalšie verzie
40
Lokálne úložisko verzií
Pracovný adresár Lokálne úložisko verzií float whatever(float a) { float b; b = a * 10; b = sqrt(b); return b; } foo.c 1 Lorem ipsum dolor sit float whatever(float a) { float b; b = a * 10; b = b – a; b = b * b; return b; } foo.c 2 Sed do eiusmod tempor float whatever(float a) { float X; X = a * 10; X = X – a; X = X * X; return b; } foo.c float whatever(float a) { float X; X = a * 10; X = X – a; X = X * X; return b; } foo.c 3 beatae vitae dicta indexed
41
Aby sa nám to zmestilo na slajd
Pracovný adresár Lokálne úložisko verzií 1 foo.c foo.c indexed 2 foo.c 3 foo.c Aby sa nám to zmestilo na slajd
42
Verziovať môžeme naraz viacero súborov
Pracovný adresár Lokálne úložisko verzií git add foo.c git add bar.c git commit –m “” 1 foo.c bar.c zmeníme súbory foo.c idx stg git commit –m “” Nestane sa nič :-) bar.c idx stg git add foo.c git commit –m “” baz.c 2 foo.c zmeníme súbory fred.c git add quux.c quux.c idx stg git commit –m “” quux.c 3 zmeníme súbory git commit –a –m “” 4 foo.c bar.c quux.c Verziovať môžeme naraz viacero súborov (ale nemusíme vždy „komitnúť“ všetky)
43
Aktuálny stav pracovného adresára
Pracovný adresár Lokálne úložisko verzií 1 2 3 4 2 foo.c 1 bar.c 4 quux.c 3 foo.c bar.c baz.c fred.c quux.c Aktuálny stav pracovného adresára Uvažujme už odteraz jednotlivé verzie ako skupiny zmien viacerých súborov
44
Často potrebujeme pracovať na veciach paralelne
Pracovný adresár Lokálne úložisko verzií git branch nova_funkcia /programujeme novu funkciu/ git commit –a –m “” /zistime chybu/ git checkout master git branch oprava_chyby /opravujeme chybu/ git merge oprava_chyby git checkout nova_funkcia git merge nova_funkcia git branch –d nova_funkcia git branch –d oprava_chyby Vetva master Vetva nová funkcia Vetva oprava chyby Často potrebujeme pracovať na veciach paralelne
45
Vetvenie vám umožní paralelnú prácu a zavádza poriadok vo verziách
bit.ly/mip-dotaznik
46
Aktuálny stav pracovného adresára
Pracovný adresár git commit Lokálne úložisko verzií Aktuálny stav pracovného adresára
47
Aktuálny stav pracovného adresára
Pracovný adresár git commit Lokálne úložisko verzií Vzdialené úložisko git push Aktuálny stav pracovného adresára git pull
48
push vlastne znamená aktualizovať vzdialené úložisko z vlastného lokálneho úložiska
Štandardne sa aktualizuje jedna vetva git push [adresa vzdialeného repozitára][branch] Napríklad git push master Adresa úložiska sa často nahradzuje aliasom git push origin master Môžete aktualizovať všetky vetvy naraz git push –all origin bit.ly/mip-dotaznik
49
fetch alebo pull: zo vzdialeného do lokálneho
Stiahnutie nových zmien zo vzdialeného úložiska git fetch Stiahnutie nových zmien + aktualizovanie pracovného adresára git pull bit.ly/mip-dotaznik
50
Tento obrázok už by mal byť jasnejší
(ale iste nie kompletne jasný)
51
A chápať by ste tiež mali tento vtip
bit.ly/mip-dotaznik
52
Git antipatterns One big commit Žiadne reálne verziovanie, len pridávanie nových súborov Vkladanie generovaných súborov Vkladanie binárnych súborov Vkladanie archívov zip a rar (sic!) Upload súborov cez web (sic!!!) bit.ly/mip-dotaznik
53
bit.ly/mip-dotaznik Git antipatterns bit.ly/mip-dotaznik
54
Rada na záver: Nezahrávajte sa so silou!
55
Keď pôjdete von, prediskutujte...
Čomu sa venuješ? Civiem do mobilu (krátka esej Tomáša Uleja o tom, koľko krát za deň nechávame vyrušiť) Odomknutý článok bit.ly/mip-dotaznik
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.