IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

12. diel - Git - Vzdialený repositár - Práca s repositárom

V minulej lekcii, Git - Vzdialený repositár - Tvorba a nastavenie repositára, sme si vytvorili vzdialený repositá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 Git tutoriále budeme pokračovať v práci so vzdialeným repositá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ý repositár

V lekcii Vzdialený repositár - Tvorba a nastavenie repositára, sme si vytvorili odkaz z nášho lokálneho repositára na repositár vzdialený. Teraz tento odkaz využijeme na nahranie a stiahnutie aktualizácií zo vzdialeného repositára do nášho lokálneho repositára.

Súbory do vzdialeného repositára môžeme zaslať pomocou verzovacieho nástroja Git. Je tiež možné súbory do vzdialeného repositára nahrať 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 repositára.

Zaslanie súborov cez Git

V Gite slúži na nahranie súborov do vzdialeného repositá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]

Pokiaľ 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 repositára. Nahráme náš lokálny repositá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 repositára na platforme GitHub a aktualizujeme stránku. Náš repositár sa aktualizoval podľa posledného uskutočneného commitu z lokálneho repositára:

Aktualizovaný repositár - Git

Na obrázku, v hlavičke, vidíme 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 repositári máme možnosť nahrať súbory, alebo ich priamo vytvoriť. Skúsime si to na vytvorenie súboru README.md.

V hlavičke repositára klikneme na Add file a v otvorenej ponuke vyberieme Create new file:

Menu pre nahranie/vytvorenie súboru - Git

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

Editor súboru - Git

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:

Vytvorenie súboru README.md - Git

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

Vytvorenie súboru README.md - Git

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:

Vytvorenie commitu - Git

Kliknutím na Commit changes commit vytvoríme. Repositá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 repositára:

Aktualizovaný repositár po vytvorení README.md - Git

GitHub automaticky použije súbor README.md ako stručnú dokumentáciu.

Stiahnutie aktualizácií zo vzdialeného repositára

Teraz si predvedieme, čo sa stane, keď sa pokúsime nahrať zmeny z nášho lokálneho repositára na ten vzdialený, ktorý už má iné zmeny.

Najskôr náš lokálny repositár upravíme. Spustite nižšie uvedené príkazy, ktorými upravíme súbor test_file.txt v našom lokálnom repositári. Potom vytvoríme commit a pokúsime sa nahrať zmeny na náš vzdialený repositá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ísala chybové hlásenie. Táto chybová správa popisuje neúspešný pokus o aktualizáciu vzdialeného repositára, pretože obsahuje zmeny, ktoré v našom lokálnom repositári nie sú dostupné. Najprv si teda musíme tieto zmeny stiahnuť do nášho lokálneho repositá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 repositá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 repositá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 repositár aktualizovaný. Spustíme príkaz git push a nahráme posledný commit na vzdialený repositár:

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 repositári 😀

Uzavretie Issue u vzdialeného repositára

V lekcii Vzdialený repositár - Tvorba a nastavenie repositá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 repositára klikneme na Issues:

Tlačidlo na otvorenie Issues - Git

Otvorí sa nám stránka so všetkými Issues vytvorených pre náš repositár:

Zoznam všetkých Issue - Git

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

Detail nového Issue - Git

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 repositár je prázdny. Napíšeme teda správu o nahraní súborov do repositára. Do textového poľa napíšeme The files to the repository have been uploaded:

Napísanie komentára do Issue - Git

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

Menu pre výber typu zrušenia. - Git

Otvorí sa nám ponuka ponúkajúca tie 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:

Issue po uzavretí - Git

Týmto sme úspešne vyriešili Issue u nášho repositá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:

Štruktúra Git prikazov - Git

V nasledujúcom kvíze, Kvíz - Kolízie medzi vetvami a vzdialený repositár v Gitu, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
Git - Vzdialený repositár - Tvorba a nastavenie repositára
Všetky články v sekcii
Git
Preskočiť článok
(neodporúčame)
Kvíz - Kolízie medzi vetvami a vzdialený repositár v Gitu
Článok pre vás napísal Filip Studený
Avatar
Užívateľské hodnotenie:
2 hlasov
.
Aktivity