21. diel - Verzovací nástroj Git a IntelliJ IDEA
V predchádzajúcom cvičení, Riešené úlohy k 18.-20. lekcii Javy, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
Základné konštrukcie jazyka Java máme za sebou. Kým kurz úplne opustíme, naučíme sa pracovať s nástrojom Git, ktorý nám pomáha efektívne spravovať a sledovať zmeny v našom kóde. Často sa tiež používa na spoluprácu vo vývojových tímoch. S Gitom budeme pracovať pomocou integrácie v IDE IntelliJ IDEA a ukážeme si aj postup pomocou príkazového riadku alebo aplikácie GitHub Desktop.
Čo je to Git?
Git je nástroj pre správu verzií, ktorý programátorom umožňuje sledovať históriu všetkých zmien v projekte. Môžeme sa tak jednoducho vrátiť k ľubovoľnej predchádzajúcej verzii nášho kódu, ktorá bola ešte funkčná. Git nám taktiež umožňuje vrátiť sa späť, keď zistíme, že nám nový spôsob riešenia nakoniec nevyhovuje. Verzie je možné organizovať do tzv. vetví, ktoré si môžeme ľubovoľne pomenovávať.
Git si môžeme predstaviť aj ako magický denník, ktorý si pamätá každý náš krok pri písaní kódu.
Prečo používať Git?
Git nám určite pomôže organizovať kód vo vlastných projektoch. Najväčší prínos Gitu je ale pri práci v tíme, kedy umožňuje jednoducho vidieť, aké konkrétne zmeny kto v aplikácii vykonal a kde. Keď sa stane, že dvaja ľudia editovali ten istý súbor, možno zmeny zlúčiť (zamergovať). Vďaka tomu sa nestane, že by si členovia vývojového tímu prepisovali kód pod rukami. Preto je základná znalosť práce s Gitom očakávaná na väčšine pracovných pozícií (kde existuje nejaký vývojový tím). Keď potenciálnemu zamestnávateľovi ukážeme svoje projekty napr. na GitHube, budeme vyzerať oveľa serióznejšie, než keď ich budeme zdieľať napr. cez Google Disk.
Git je možné používať do istej miery aj ako zálohu. Zmeny však musíme ručne a pravidelne nahrávať na vzdialený repozitár. Aplikácie tiež obvykle obsahujú aj ďalšie súbory okrem zdrojových kódov, ktoré sa na Git nedávajú. Preto minimálne pre začiatočníkov odporúčame stále používať synchronizované úložiská typu Dropbox, aby sme o svoje projekty neprišli pri strate alebo poškodení počítača.
Základné príkazy Gitu
S Gitom sa často pracuje pomocou príkazového riadka. My si ukážeme, ako s ním pracovať v grafickom rozhraní IntelliJ IDEA, v príkazovom riadku aj v desktopovej aplikácii GitHub Desktop. Budeme používať nasledujúce príkazy:
- Clone - Skopíruje repozitár z GitHubu na náš počítač.
- Add – Pridá zmeny k budúcemu uloženiu.
- Commit – Uloží zmeny tak, že vytvorí záznam o tom, čo sa od posledného commitu (uloženia) zmenilo.
- Push – Nahrá všetky naše lokálne zmeny (commity) na vzdialený server, odkiaľ si ich môžu ostatní programátori stiahnuť.
- Pull – Stiahne zo vzdialeného servera všetky zmeny od ostatných programátorov do našej verzie kódu.
Príkazov je samozrejme viac, tým je potom venovaný celý kurz. Nám to však takto stačí.
Git repozitár
Git repozitár si predstavme ako špeciálny priečinok v našom počítači, ktorý obsahuje všetky súbory projektu, ale okrem toho aj informácie o histórii všetkých zmien, ktoré sme v týchto súboroch urobili. Zakaždým, keď urobíme nový commit, Git uloží informácie o zmenách práve do repozitára.
Vzdialený vs. lokálny repozitár
Repozitár je uložený na našom počítači (lokálny repozitár), ale aj na serveri na internete (vzdialený repozitár). Zakaždým, keď vykonáme push, odošleme všetky zmeny z nášho lokálneho repozitára do vzdialeného. Tam si ich potom môžu prezerať ďalší ľudia. A naopak, keď vykonáme pull, stiahneme najnovšie zmeny zo vzdialeného repozitára do svojho lokálneho repozitára (napr. zmeny vykonané ostatnými).
Vytvorenie vzdialeného GitHub repozitára
GitHub je jednou z najznámejších platforiem pre hosťovanie Git repozitárov, a preto ju budeme využívať aj my v tomto tutoriáli.
Registrácia
Aby sme na GitHube mohli vytvoriť vlastný repozitár, musíme sa najskôr zaregistrovať. Prejdeme na oficiálne stránky GitHub a vykonáme registráciu, kde si nastavíme:
- e-mailovú adresu,
- heslo,
- svoju unikátnu prezývku.
V nasledujúcej ukážke využívame zavináč @.
Zavináč na slovenskej klávesnici môžeme napísať pomocou klávesy
pravý ALT a písmena V:

Postup registrácie vyzerá takto:

Vytvorenie vzdialeného repozitára
Po úspešnej registrácii sa prihlásime do svojho účtu. V pravom hornom rohu klikneme na tlačidlo s plusom a šípkou (+▼) a z menu vyberieme položku New repository:

Následne vidíme formulár na vytvorenie repozitára. Poďme si podrobnejšie prejsť jednotlivé položky a ich význam:
- Repository name - Názov repozitára je
krátky, jednoduchý a opisuje, čo obsahuje. Vyhýbame sa špeciálnym znakom a
namiesto medzier píšeme pomlčky (
-). - Public / Private - Viditeľnosť určuje, kto môže repozitár vidieť a pristupovať k nemu. Najčastejšie vytvárame privátne repozitáre, ku ktorým máme prístup iba my či naši kolegovia. Verejné repozitáre vytvárame najmä pre tzv. open source projekty, ktoré povzbudzujú verejnú spoluprácu.
- README file - Tento dokument je prvá vec, ktorú používateľ vidí, keď navštívi náš repozitár. Obsahuje základný popis projektu, inštrukcie pre inštaláciu, použitie, prispievanie do projektu a tak ďalej.
- .gitignore – Už vieme, že Git repozitár by mal
obsahovať primárne zdrojový kód a súvisiace konfiguračné súbory. Tento
súbor sa používa na vylúčenie ostatných súborov alebo
zložiek z verziovacieho systému. Ide napríklad o dočasnú zložku
.idea/, spustiteľné.jarsúbory a podobne. - License - Licencia v repozitári určuje, ako môžu ostatní používať, kopírovať, modifikovať či distribuovať náš projekt.
Nový repozitár pomenujeme napr. git-tutorial, viditeľnosť
nastavíme na Private a ďalej pridáme README a .
gitignore template: Java:

Teraz, keď máme formulár vyplnený, klikneme na tlačidlo Create repository a počkáme, kým sa vzdialený repozitár vytvorí:

Týmto máme vzdialený GitHub repozitár vytvorený a môžeme prejsť na prácu s Gitom v IntelliJ IDEA 😊
Inštalácia Gitu
Najprv potrebujeme mať na našom počítači nainštalovaného Git klienta. Prejdeme na stránku https://git-scm.com/, kde klikneme na tlačidlo Install for Windows:

Následne klikneme na Click here to download:

Po spustení inštalátora stačí klikať na tlačidlo Next až do poslednej obrazovky, kde klikneme na Install. Tým máme Git klienta nainštalovaného na svojom počítači.
Ukážeme si postupné kroky práce s Gitom pri vytváraní nových verzií (tzv. commitov) a následnom nahrávaní na GitHub.
Git Clone
Vytvoriť lokálny repozitár ide viacerými spôsobmi. Pokiaľ už
vzdialený repozitár existuje, ako v našom prípade, stačí využiť
klonovanie. Príkaz git clone teda skopíruje
vzdialený repozitár do lokálneho v našom počítači.
S Gitom je možné pracovať priamo v IDE, cez príkazový riadok alebo pomocou desktopovej aplikácie. Odporúčame pre začiatok používať integráciu priamo v IDE. Pokiaľ by postup nefungoval, napr. z dôvodu zmeny rozhrania IDE, môžete postupovať podľa alternatívneho návodu, na ktorý sa prepneme pomocou tlačidiel nižšie.
-
Pokiaľ sme mali IntelliJ IDEA spustený počas inštalácie Gitu, reštartujeme ho. Otvoríme ľubovoľný projekt alebo vytvoríme nový. Najskôr potrebujeme nakonfigurovať Git v IntelliJ IDEA. Začneme tým, že vyberieme cestu k nainštalovanému Git klientovi. V menu zvolíme File -> Settings -> Version Control -> Git. V okne v časti "Path to Git executable:" by sme mali mať napísané Auto-detected a cestu. Prípadne cestu ku Gitu nastavíme ručne, napr.
C:\Program Files\Git\cmd\git.exe.Overiť si to môžeme kliknutím na tlačidlo Test. Pokiaľ sa objaví "Git version is 2.x.x", všetko je správne nastavené:

Následne môžeme pristúpiť ku klonovaniu nášho repozitára z GitHub. V menu vyberieme VCS -> Get from Version Control... (ak by sme nemali otvorený projekt, v úvodnej ponuke môžeme priamo kliknúť na Clone Repository):

Klonovanie repozitára
V ďalšom kroku sa potrebujeme do GitHubu prihlásiť z IntelliJ IDEA a autorizovať prepojenie týchto dvoch nástrojov. Prepneme sa do menu GitHub a klikneme na Log In via GitHub…:

Otvorí sa prehliadač, kde potvrdíme tlačidlom a prihlásime sa do svojho GitHub účtu:

Po prihlásení autorizujeme integráciu do IDE IntelliJ IDEA:

Pokiaľ došlo počas autorizácie k problému, prehliadač zatvorte, vystornujte v IntelliJ IDEA proces logovania a vykonajte akcie znovu tlačidlom Log In via GitHub….
Po úspešnom prepojení účtov sa zobrazí potvrdzovacia hláška:

Teraz v IntelliJ IDEA vidíme formulár s našimi vzdialenými GitHub repozitármi. Z ponuky vyberieme repozitár
git-tutorial, ktorý sme si v predchádzajúcom kroku založili, a klikneme na tlačidlo Clone:
Týmto sa vzdialený repozitár naklonuje (skopíruje) z GitHubu do počítača. Ihneď potom sa automaticky otvorí rozhranie IntelliJ IDEA, ktoré už dobre poznáme. V prípade, že vám vyskočí výstražné okno varujúce pred nebezpečenstvom škodlivého kódu, zvoľte možnosť Trust Project, čím potvrdíte, že klonovanému projektu dôverujete:

- V praxi sa na prácu s Gitom veľmi často používa
terminál (príkazový riadok). Jeho výhodou je rovnaký spôsob použitia bez
ohľadu na operačný systém (Windows, macOS, Linux) a IDE. Ukážme si teda,
ako s ním pracovať.
Vo Windows si najprv otvoríme terminál Git Bash. V Prieskumníkovi si nájdeme adresár s projektmi IntelliJ IDEA, do ktorého budeme chcieť naklonovať náš projekt git-tutorial. Väčšinou je to priečinok
C:\Users\vase_meno\IdeaProjects\. Na adresár klikneme pravým tlačidlom myši a v menu zvolíme Zobraziť ďalšie možnosti a Open Git Bash here:
Otvorí sa nám špeciálny terminál, do ktorého budeme postupne písať git príkazy. Na operačných systémoch macOS a Linux nám stačí otvoriť si klasický terminál (konzolu) v priečinku
IdeaProjects.Do terminálu napíšeme príkaz:
git clone adresa_nasho_github_projektu
Adresu nášho projektu môžeme získať z URL v našom prehliadači na stránke GitHub. Príkaz by mal vyzerať napríklad nasledovne:
git clone https://github.com/D3NY/git-tutorial, kdeD3NYnahradíme našou prezývkou (username), ktorú sme si zvolili pri registrácii na GitHub.Po potvrdení Enter sa nám otvorí okno Connect to GitHub s výzvou na prihlásenie sa ku GitHubu. Zvolíme možnosť Sign in with your browser:

V termináli sa nám zatiaľ vypíše informácia o tom, že autentifikáciu máme dokončiť vo svojom prehliadači:
Cloning into 'git-tutorial'... info: please complete authentication in your browser...
Prejdeme do okna v prehliadači a vyplníme naše prihlasovacie údaje a heslo. Následne potvrdíme kliknutím na tlačidlo Sign in:

Zostáva nám ešte potvrdiť, že naozaj chceme autorizovať prístup Git Credential Manager k nášmu účtu GitHub:

Po potvrdení úspešnej autentifikácie môžeme okno prehliadača zavrieť:

V termináli máme medzitým výpis, z ktorého nás najviac zaujíma posledný riadok
Receiving objects: 100%, potvrdzujúci úspech operácie:remote: Enumerating objects: 4, done. remote: Counting objects: 100% (4/4), done. remote: Compressing objects: 100% (3/3), done. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) Receiving objects: 100% (4/4), done.
V IntelliJ IDEA otvoríme náš projekt
git-tutorialvýberom z menu File -> Open....V prípade, že vám vyskočí výstražné okno varujúce pred nebezpečenstvom škodlivého kódu, zvoľte možnosť Trust Project, čím potvrdíte, že klonovanému projektu dôverujete:

- Spustíme program GitHub Desktop. Na stránke
Welcome to GitHub Desktop zvolíme možnosť Sign in
GitHub.com:

Na ďalšej stránke vyplníme naše prihlasovacie údaje a heslo k účtu GitHub. Následne potvrdíme kliknutím na tlačidlo Sign in:

Vzápätí ešte potvrdíme otvorenie aplikácie GitHub Desktop:

Zostáva nám ešte potvrdenie nastavenia identifikácie budúcich commitov jednoduchým kliknutím na tlačidlo Finish:

V menu vyberieme File -> Clone repository...:

Vyhľadáme náš vzdialený repozitár
git-tutoriala potvrdíme kliknutím na Clone:
V IntelliJ IDEA otvoríme náš projekt git-tutorial výberom z menu File -> Open....
V prípade, že vám vyskočí výstražné okno varujúce pred nebezpečenstvom škodlivého kódu, zvoľte možnosť Trust Project, čím potvrdíte, že klonovanému projektu dôverujete.

Git Add
V IntelliJ IDEA klikneme pravým tlačidlom myši na adresár
git-tutorial/, ďalej v ponuke zvolíme New >
Directory a nový adresár pomenujeme src/:

Na vytvorený adresár znovu klikneme pravým tlačidlom myši a v ponuke vyberieme Mark Directory as > Sources Root:

Potom klikneme pravým tlačidlom myši na adresár src/,
zvolíme New > Java Class a triedu pomenujeme
HelloWorld.
Môžeme si všimnúť, že v stromovej štruktúre svieti trieda
HelloWorld načerveno. To znamená, že sa zatiaľ neverzuje.
-
Zároveň sa nám zobrazilo dialógové okno Add File to Git, v ktorom sa nás IDE pýta, či chceme súbor pridať do Gitu a začať ho verzovať. Klikneme teda na tlačidlo Add:

Ak sme dialógové okno zavreli, ale názov súboru je stále červený, klikneme na súbor pravým tlačidlom myši a v ponuke zvolíme Git a klikneme na Add.
-
V termináli Git Bash prejdeme do nášho priečinka s projektom pomocou príkazu
cd(change directory):cd git-tutorial
Príkazom
git statussi môžeme overiť, ktoré súbory a adresáre (zafarbené červenou farbou) môžeme pridávať (git add) do ďalšej verzie:
Vidíme tu adresáre
src/a.idea/. Keďže skrytý adresár.idea/nepotrebujeme verzovať, pridáme ho do takzvaného ignore súboru nasledujúcim príkazom:echo .idea/ >> .gitignore
Pri overení príkazom
git statussa už daný adresár.idea/nevypíše. Git ho úplne ignoruje a nebude ho zahŕňať do ďalších verzií:
Teraz už môžeme pomocou príkazu
git addpridať priečinoksrc/vrátane súboruHelloWorld.javaaj modifikovaný súbor.gitignoredo takzvanej staging fázy, teda pripravené na vytvorenie novej verzie (commit):git add src/ .gitignore
Príkazom
git statussi môžeme overiť, ktoré súbory (zafarbené zelenou farbou) budú nahrané do budúcej verzie (commit):
-
V aplikácii sa nám v ľavej časti zobrazia súbory, ktoré sú buď nové, alebo v nich došlo k nejakej zmene. Modrou fajkou necháme označené iba
.gitignoreasrc\HelloWorld.java. Tým hovoríme, že iba tieto dva súbory chceme zahrnúť do ďalšieho commitu:
Aby sme to nemuseli robiť zakaždým, pridáme adresár
.idea/do gitignore. Obsahuje totiž konfiguračné súbory IntelliJ IDEA, ktoré nechceme ukladať do novej verzie (zálohovať). V GitHub Desktop vyberieme v menu Repository -> Settings a v okne "Repository settings" zvolíme v menu Ignored files. Presunieme sa na koniec súboru.gitignorea ručne pripíšeme riadok .idea/. Potvrdíme tlačidlom Save:
V IntelliJ vľavo v stromovej štruktúre teraz vidíme triedu zeleno, čo znamená, že je do Gitu pridaná a verzuje sa.

Poďme do triedy vložiť nasledujúci kód, ktorý potom nahráme na GitHub:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }
V IntelliJ celý náš projekt vyzerá takto:

Teraz je čas vytvoriť náš prvý commit.
Git Commit
-
V ľavom postrannom paneli klikneme na ikonu
čím zobrazíme nový panel
Commit.V ponuke Changes vyberieme súbory, ktorých sa commit týka. V našom prípade iba súbor
HelloWorld.java. Ďalej do textového poľa Commit message napíšeme, čo sme urobili. My sme do repozitára pridali aplikáciu Hello World, napíšeme teda napr. Add HelloWorld application a klikneme na tlačidlo Commit:
Správne napísaná commit správa by mala jasne a stručne popisovať, aké zmeny daný commit prináša. Ďalej existujú rôzne konvencie, ale všeobecne platí, že správy píšeme v imperatíve a ideálne v anglickom jazyku.
Commit amend
Pri vytváraní commitu sa nám tiež zobrazí checkbox Amend, ktorý nám umožní upraviť posledný commit. Táto možnosť je užitočná, ak sme urobili chybu vo svojom poslednom commite, napríklad zabudli sme pridať nejaký súbor alebo chceme zmeniť commit správu.
-
Tým, že sme náš súbor
HelloWorld.javamodifikovali, musíme ho znova pridať do staging stavu príkazom:git add src/HelloWorld.java
Teraz už môžeme pristúpiť k vytvoreniu novej verzie (commitu). Samotný
git commitmusí mať uvedenú správu (Commit message). Správne napísaná commit správa by mala jasne a stručne popisovať, aké zmeny daný commit prináša. Ďalej existujú rôzne konvencie, ale všeobecne platí, že správy píšeme v imperatíve a ideálne v anglickom jazyku.Do terminálu napíšeme:
git commit -m "Add HelloWorld application"
Výstup úspešného príkazu vyzerá nasledovne:

-
Každá verzia (commit) musí mať uvedenú správu popisujúcu zmeny v tej danej verzii, tzv. Commit message. Správne napísaná commit správa by mala jasne a stručne popisovať, aké zmeny daný commit prináša. Ďalej existujú rôzne konvencie, ale všeobecne platí, že správy píšeme v imperatíve a ideálne v anglickom jazyku.
V GitHub Desktop po označení súborov, ktoré chceme dávať do novej verzie (commitu), napíšeme správu
Add HelloWorld applicationa potvrdíme kliknutím na tlačidlo Commit 2 files to main:
Git Push
Zmenu máme vytvorenú. Teraz ju nahráme do vzdialeného repozitára na GitHube. Na to slúži operácia push. Push typicky vykonávame po dokončení logickej jednotky práce, pred odchodom z domu či práce alebo ak chceme, aby naše zmeny boli viditeľné pre ostatných.
-
V IDE push vyvoláme kliknutím na záložku main v ľavej časti horného panelu:

V ďalšom okne push potvrdíme kliknutím na tlačidlo Push:

-
V termináli nám stačí napísať príkaz
git push:git push
Mali by sme vidieť obdobný výstup, ktorý znamená, že všetko prebehlo v poriadku:

-
V GitHub Desktop nám stačí kliknúť na tlačidlo Push origin:

Projekt je nahraný v našom repozitári na GitHub. Môžeme sa v
prehliadači pozrieť na náš Dashboard, že projekt má novo zložku
src/ az nej sa preklikáme až na súbor s novým kódom:

Pozor! Projekty vytvorené podľa kurzov z ITnetwork pod licenciou PRO nenahrávajte do verejných repozitárov! Sú chránené autorskými právami a ich šírenie je nelegálne. Mohol by si ich potom zobraziť a stiahnuť ktokoľvek na internete, čím by po vás mohla byť vyžadovaná náhrada škody.
Git Pull
Opačnou operáciou k push je pull. Tá stiahne zo vzdialeného servera všetky zmeny od ostatných do našej verzie kódu.
-
V IntelliJ IDEA pull vykonáme opäť kliknutím na záložku main v ľavej časti horného panelu. Potom rozklikneme položku Remote > main a zvolíme buď možnosť Rebase (ak chceme preniesť zmeny na nový základ a zachovať lineárnu históriu), alebo Merge (ak chceme zlúčiť vetvy so zachovaním pôvodnej histórie):

Keďže na vzdialenom serveri nemáme aktuálne žiadne zmeny, operácia po dokončení zobrazí hlášku All files are up-to-date.
-
Príkazom
git pullstiahneme nové commity zo vzdialeného repozitára:git pull
Keďže na vzdialenom serveri nemáme aktuálne žiadne zmeny, operácia po dokončení zobrazí hlášku:
Already up to date.
-
V aplikaci GitHub Desktop přejdeme do menu Repository a zvolíme Pull:

Keďže na vzdialenom serveri nemáme aktuálne žiadne zmeny, žiadne zmeny sa v aplikácii nevykonajú.
Teraz vieme založiť vzdialený GitHub repozitár a napojiť sa naň cez IntelliJ IDEA. Alternatívne vieme pracovať s Gitom v príkazovom riadku aj v aplikácii GitHub Desktop. Naučili sme sa vytvárať commity a do repozitára ich nahrávať pomocou príkazu push, prípadne ich stiahnuť príkazom pull. Pokiaľ vás Git zaujal, detailne sa ním zaoberáme v pokročilom kurze Git.
Zhrnutie lekcie
Git slúži na sledovanie zmien v projekte a umožňuje vracať sa k
starším verziám kódu. Lekcia ukazuje vytvorenie repozitára na GitHube, jeho
naklonovanie do počítača a základnú prácu s príkazmi add,
commit, push a pull. Ukázali sme si
prácu s Gitom v IntelliJ IDEA, cez príkazový riadok aj pomocou GitHub
Desktop. Git potom umožňuje zmeny verzovať lokálne, nahrávať ich na GitHub
a sťahovať aktuálnu verziu projektu späť do počítača.
V nasledujúcom kvíze, Kvíz - Základná konštrukcia Javy, si vyskúšame nadobudnuté skúsenosti z kurzu.
