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:
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:
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. 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:
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:
Otvorí sa nám stránka so všetkými Issues vytvorených pre náš repositá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 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
:
Issue uzavrieme klikom na šípku vedľa tlačidla Close with comment:
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:
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:
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í.