12. diel - Git - Vzdialený repozitár - Práca s repozitárom
V predchádzajúcej lekcii, Git - Vzdialený repozitár - Tvorba a nastavenie repozitára, sme si vytvorili vzdialený repozitár a ukázali si jeho dôležité nastavenia vrátane vytvorenia issue, odkazu a prístupu pre užívateľov.
V dnešnom tutoriáli Git budeme pokračovať v práci so vzdialeným repozitárom. Ukážeme si, ako do neho nahrať súbory, ako z neho stiahnuť aktualizácie a ako uzavrieť jeho issue.
Nahranie súborov na vzdialený repozitár
V lekcii Vzdialený repozitár - Tvorba a nastavenie repozitára, sme si vytvorili odkaz z nášho lokálneho repozitára na repozitár vzdialený. Teraz tento odkaz využijeme na nahranie a stiahnutie aktualizácií zo vzdialeného repozitára do nášho lokálneho repozitára.
Súbory môžeme do vzdialeného repozitára zaslať pomocou verzovacieho nástroja Git. Je tiež možné nahrať súbory do vzdialeného repozitára priamo na platforme GitHub. Skúsme si oba spôsoby, aby sme následne videli problém pri sťahovaní aktualizácií zo vzdialeného repozitára.
Zaslanie súborov cez Git
V Gite slúži na nahranie súborov do vzdialeného repozitára príkaz
git push. Príkaz pošle aktuálnu vetvu na server. Ak na serveri
vetva so zadaným menom existuje, tak ju aktualizuje, inak ju vytvorí. Pokiaľ
chceme poslať vetvu, ktorá má na serveri iné meno, použijeme príkaz vo
formáte:
git push [source] [local branch name]:[branch name on the remote server]
Ak by sme použili príkaz git push bez parametrov,
Git by automaticky poslal zmeny na zdroj origin.
Presuňme sa do nášho lokálneho repozitára. Nahráme náš lokálny
repozitár na vzdialený server príkazom git push origin main:
MINGW64:/c/mygit IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $ git push origin main Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 8 threads Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 698 bytes | 232.00 KiB/s, done. Total 7 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), done. To https://github.com/testUser/mygit.git * [new branch] main -> main IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit(main) $
Po úspešnom nahraní sa vrátime do repozitára na platforme GitHub a aktualizujeme stránku. Náš repozitár sa aktualizoval podľa posledného uskutočneného commitu z lokálneho repozitára:

Na obrázku vidíme v hlavičke posledný uskutočnený commit. Pri každom súbore vidíme, kedy bol vytvorený a názov commitu, ktorým bol ovplyvnený. V pravej lište vidíme sekciu Languages, do ktorej GitHub zaznamená použité programovacie jazyky a šablóny, ktoré rozoznal.
Nahranie súborov na platforme GitHub
Na vzdialenom repozitári máme možnosť nahrať súbory, alebo ich priamo
vytvoriť. Skúsime si to vytvorením súboru README.md.
V hlavičke repozitára klikneme na Add file a v otvorenej ponuke vyberieme Create new file:

Otvorí sa nám tento editor súboru:

Súbor pomenujeme README.md a do popisu súboru vložíme
nasledujúci text:
# Test repository This repository is for testing purposes only
Editor súboru teraz vyzerá takto:

Súbor vytvoríme kliknutím na Commit changes...:

Budeme vyzvaní na vytvorenie commitu. Do poľa Commit message
vložíme názov commitu Create README.md a do Extended
description potom Creating README.md:

Kliknutím na Commit changes commit vytvoríme. Repozitár sa
aktualizuje a v hlavičke sa zobrazí commit s názvom
Create README.md. Novo vytvorený súbor README.md je
pridaný do repozitára:

GitHub automaticky použije súbor README.md ako
stručnú dokumentáciu.
Stiahnutie aktualizácií zo vzdialeného repozitára
Teraz si predvedieme, čo sa stane, keď sa pokúsime nahrať zmeny z nášho lokálneho repozitára na ten vzdialený, ktorý má už iné zmeny.
Najskôr náš lokálny repozitár upravíme. Spustíme nižšie uvedené
príkazy, ktorými upravíme súbor test_file.txt v našom
lokálnom repozitári. Potom vytvoríme commit a pokúsime sa nahrať zmeny na
náš vzdialený repozitár príkazom git push origin main:
MINGW64:/c/mygit IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $ echo "Text added to test file" >> test_file.txt IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $ git add . IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $ git commit -m "Adding text to the test file" [main 8307443] Adding text to the test file 1 file changed, 1 insertion(+) create mode 100644 test_file.txt $ git push origin main To https://github.com/testUser/mygit.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'https://github.com/testUser/mygit.git' hint: Updates were rejected because the remote contains work that you do not hint: have locally. This is usually caused by another repository pushing to hint: the same ref. If you want to integrate the remote changes, use hint: 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $
Vidíme, že sa nám vypísalo chybové hlásenie. Táto chybová správa
popisuje neúspešný pokus o aktualizáciu vzdialeného repozitára, pretože
obsahuje zmeny, ktoré v našom lokálnom repozitári nie sú dostupné. Najprv
si teda musíme tieto zmeny stiahnuť do nášho lokálneho repozitára pomocou
príkazu git fetch alebo git pull.
Príkaz git fetch
Príkaz slúži na sťahovanie nových dát zo vzdialeného úložiska bez toho, aby ich integroval do našich pracovných súborov. Umožňuje nám získať informácie o zmenách, nových vetvách, či commit správach bez toho, aby akokoľvek narušil našu pracovnú kópiu.
Formát použitia príkazu git fetch je nasledujúci:
git fetch [source-name] [branch]
Na stiahnutie všetkých registrovaných vzdialených repozitárov a ich
vetiev by sme použili príkaz git fetch vo formáte:
git fetch --all
Po stiahnutí aktualizácií príkazom git fetch by sme sa
prepli na stiahnutú vetvu a následne vetvy zlúčili príkazom
git merge.
Príkaz git pull
Na rozdiel od príkazu git fetch, príkaz git pull
nielen stiahne obsah zo vzdialeného úložiska, ale taktiež aktualizuje
miestne úložisko. Príkaz git pull je v skutočnosti kombináciou
príkazov git fetch a git merge. V prvej fáze
operácie príkaz git pull vykoná príkaz git fetch
vymedzený na miestnu vetvu, na ktorú smeruje HEAD. Akonáhle je
obsah stiahnutý, príkaz git pull vstúpi do pracovného postupu
zlúčenia. Vytvorí nový commit zlúčenia a HEAD aktualizuje
tak, aby naň ukazoval.
Teraz si príkaz git pull vyskúšame na aktualizáciu nášho
miestneho repozitára, v ktorom spustíme príkaz
git pull origin main. Získame popis procesu zlúčenia:
MINGW64:/c/mygit IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $ git pull origin main remote: Enumerating objects: 4, done. remote: Counting objects: 100% (4/4), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 833 bytes | 39.00 KiB/s, done. From https://github.com/testUser/mygit * branch main -> FETCH_HEAD 7c1cc01..9a48c6a main -> origin/main Merge made by the 'ort' strategy. README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $
Teraz je náš lokálny repozitár aktualizovaný. Spustíme príkaz
git push a na vzdialený repozitár nahráme posledný commit:
MINGW64:/c/mygit IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $ git push origin main Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 8 threads Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 698 bytes | 232.00 KiB/s, done. Total 7 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), done. To https://github.com/testUser/mygit.git * [new branch] main -> main IctDemy@DESKTOP-ADEVTG4 MINGW64 /c/mygit (main) $
Naše lokálne zmeny sú úspešne nahrané na vzdialenom repozitári 😀
Uzavretie issue pri vzdialenom repozitári
V lekcii Vzdialený repozitár - Tvorba a nastavenie repozitára sme si ukázali tvorbu issue. Teraz si ukážeme uzavretie issue.
Jednotlivé issue môžeme uzavrieť dvoma spôsobmi:
- Close as completed (Zavrieť ako dokončené) - issue bude označené ako vyriešené.
- Close as not planned (Zavrieť ako nedokončené) - issue bude označené ako nevyriešené.
My si ukážeme, ako uzavrieť naše Test issue ako
vyriešené.
Uzavretie issue ako vyriešené
V hornom menu repozitára klikneme na Issues:

Otvorí sa nám stránka so všetkými issues vytvorenými pre náš repozitár:

Kliknutím na Test issue si ho otvoríme:

Pred uzavretím issue je dôležité napísať komentár popisujúci spôsob,
akým bola situácia vyriešená. Problém, ktorý je zastúpený v issue s id
#1 indikuje, že je repozitár prázdny. Napíšeme teda správu o
nahraní súborov do repozitára. Do textového poľa napíšeme
The files to the repository have been uploaded:

Issue uzavrieme klikom na šípku vedľa tlačidla Close with comment:

Otvorí sa nám ponuka ponúkajúca dve vyššie popísané voľby uzavretia issue. Kliknite na Close as completed. Issue sa uzavrie a stránka sa aktualizuje. Po tejto akcii vidíme, že značka Open sa zmenila na Closed, čo označuje uzavretie issue. Súčasne je pridaný náš komentár a identifikačná značka signalizujúca uzavretie issue:

Týmto sme úspešne vyriešili issue nášho repozitára.
Prehľad základných príkazov
Nakoniec si ešte znázorníme účinnosť prebraných základných Git príkazov na jednotlivé pracovné priestory:
V nasledujúcom kvíze, Kvíz - Kolízie medzi vetvami a vzdialený repozitár v Gite, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.
