Lekce 12 - Git - Vzdálený repozitář - Práce s repozitářem
V minulé lekci, Git - Vzdálený repozitář - Vytvoření a nastavení repozitáře, jsme si vytvořili vzdálený repozitář a ukázali jsme si jeho důležitá nastavení včetně vytvoření issue, odkazu a přístupu pro uživatele.
V dnešním Git tutoriálu budeme pokračovat v práci se vzdáleným repozitářem. Ukážeme si, jak do něj nahrát soubory, jak z něj stáhnout aktualizace a jak uzavřít jeho issue.
Nahrání souborů na vzdálený repozitář
V lekci Vzdálený repozitář - Vytvoření a nastavení repozitáře jsme si vytvořili odkaz z našeho lokálního repozitáře na repozitář vzdálený. Nyní tento odkaz využijeme k nahrání a stáhnutí aktualizací ze vzdáleného repozitáře do našeho lokálního repozitáře.
Soubory do vzdáleného repozitáře můžeme zaslat pomocí verzovacího nástroje Git. Také je tam můžeme nahrát přímo na platformě GitHub. Zkusme si oba způsoby, abychom následně viděli problém při stahování aktualizací ze vzdáleného repozitáře.
Zaslání souborů přes Git
Pro nahrání souborů do vzdáleného repozitáře v Gitu slouží příkaz
git push
. Příkaz pošle aktuální větev na server. Pokud na
serveru větev se zadaným jménem již existuje, příkaz ji aktualizuje, jinak
ji vytvoří. Chceme-li poslat větev, která má na serveru jiné jméno,
použijeme příkaz ve formátu:
git push [zdroj] [název lokální větve]:[název větve na vzdáleném serveru]
Pokud bychom použili příkaz git push
bez
parametrů, Git by automaticky poslal změny na zdroj origin
.
Přesuňme se do našeho lokálního repozitáře. Náš lokální
repozitář nahrajme na vzdálený server příkazem
git push origin main
:
MINGW64:/c/mujgit ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (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/testovaciUser/mujgit.git * [new branch] main -> main ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (main) $
Po úspěšném nahrání se vrátíme do repozitáře na platformě GitHub a aktualizujeme stránku. Náš repozitář se aktualizoval podle posledně provedeného commitu z lokálního repozitáře:
Na obrázku v hlavičce vidíme poslední provedený commit. U každého souboru vidíme údaj, kdy byl vytvořen, a název commitu, kterým byl ovlivněn. V pravé liště vidíme sekci Languages, do které GitHub zaznamená použité programovací jazyky a šablony, které rozeznal.
Nahrání souborů na platformě GitHub
Na vzdáleném repozitáři máme možnost soubory nahrát nebo je přímo
vytvořit. Zkusíme si to na vytvoření souboru README.md
.
V hlavičce repozitáře klikneme na Add file a v otevřené nabídce
vybereme Create new file:
Otevře se nám tento editor souboru:
Soubor pojmenujeme README.md
a do popisu souboru vložíme
následující text:
# Testovací repozitář Tento repozitář slouží výhradně pro účely testování.
Editor souboru nyní vypadá takto:
Soubor vytvoříme kliknutím na Commit changes…:
Budeme vyzváni k vytvoření commitu. Do pole Commit message
vložíme název commitu Create README.md
a do Extended
description pak Vytvoření README.md
:
Kliknutím na Commit changes commit vytvoříme. Repozitář se
aktualizuje a v hlavičce se zobrazí commit s názvem
Create README.md
. Nově vytvořený soubor README.md
je přidán do repozitáře:
GitHub automaticky použije soubor README.md
jako
stručnou dokumentaci.
Stáhnutí aktualizací ze vzdáleného repozitáře
Nyní si předvedeme, co se stane, když se pokusíme nahrát změny z
našeho lokálního repozitáře na ten vzdálený, který již
má jiné změny.
Nejdříve náš lokální repozitář upravíme. Spustíme níže uvedené
příkazy, kterými upravíme soubor testovaci_soubor.txt
v našem
lokálním repozitáři. Poté vytvoříme commit a pokusíme se nahrát změny
na náš vzdálený repozitář příkazem
git push origin main
:
MINGW64:/c/mujgit ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (main) $ echo "Text přidaný do testovacího souboru" >> testovaci_soubor.txt ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (main) $ git add . ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (main) $ git commit -m "Přidání textu do testovacího souboru" [main 8307443] Přidání textu do testovacího souboru 1 file changed, 1 insertion(+) create mode 100644 testovaci_soubor.txt $ git push origin main To https://github.com/testovaciUser/mujgit.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'https://github.com/testovaciUser/mujgit.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. ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (main) $
Vidíme, že se nám vypsala chybová zpráva. Tato chybová zpráva popisuje
neúspěšný pokus o aktualizaci vzdáleného repozitáře, neboť ten obsahuje
změny, které v našem lokálním repozitáři nejsou dostupné. Nejprve si
tedy musíme tyto změny stáhnout do našeho lokálního repozitáře pomocí
příkazu git fetch
nebo git pull
.
Příkaz git fetch
Příkaz slouží ke stahování nových dat ze vzdáleného úložiště, aniž je integruje do našich pracovních souborů. Umožňuje nám získat informace o změnách, nových větvích či commit zprávách, aniž jakkoli narušuje naši pracovní kopii.
Syntaxe příkazu git fetch
je následující:
git fetch [název-zdroje] [větev]
Pro stažení všech registrovaných vzdálených repozitářů a jejich
větví bychom použili příkaz git fetch
ve formátu:
git fetch --all
Po stažení aktualizací příkazem git fetch
bychom se
přepnuli na staženou větev a následně větve sloučili příkazem
git merge
.
Příkaz git pull
Na rozdíl od příkazu git fetch
stáhne příkaz
git pull
nejenom obsah ze vzdáleného úložiště, ale také
aktualizuje místní úložiště. Příkaz git pull
je ve
skutečnosti kombinací příkazů git fetch
a
git merge
. V první fázi operace příkaz git pull
provede příkaz git fetch
vymezený na místní větev, na kterou
směřuje HEAD
. Jakmile je obsah stažen, příkaz
git pull
vstoupí do pracovního postupu sloučení: vytvoří
nový commit sloučení a HEAD
aktualizuje tak, aby na něj
ukazoval.
Nyní si příkaz git pull
vyzkoušíme na aktualizaci našeho
místního repozitáře, ve kterém spustíme příkaz
git pull origin main
. Získáme popis procesu sloučení:
MINGW64:/c/mujgit ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (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/testovaciUser/mujgit * 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 ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (main) $
Nyní je náš lokální repozitář aktualizovaný. Spustíme příkaz
git push origin main
, kterým nahrajeme poslední commit na
vzdálený repozitář:
MINGW64:/c/mujgit ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (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/testovaciUser/mujgit.git * [new branch] main -> main ItNetwork@DESKTOP-ADEVTG4 MINGW64 /c/mujgit (main) $
Naše lokální změny jsou úspěšně nahrány na vzdáleném repozitáři 😀
Uzavření issue u vzdáleného repozitáře
V lekci Vzdálený repozitář - Vytvoření a nastavení repozitáře jsme si ukázali tvorbu issue. Nyní si ukážeme jeho uzavření.
Jednotlivá issues můžeme uzavřít dvěma způsoby:
- Close as completed (zavřít jako dokončené) – issue bude označeno jako vyřešené.
- Close as not completed (zavřít jako nedokončené) – issue bude označeno jako nevyřešené.
My si ukážeme, jak uzavřít naše Testovací issue
jako
vyřešené.
Uzavření issue jako vyřešené
V horním menu repozitáře klikneme na Issues:
Otevře se nám stránka se všemi issues vytvořenými pro náš repozitář:
Kliknutím na Testovací issue si jej otevřeme:
Před uzavřením issue je důležité napsat komentář popisující
způsob, jakým byla situace vyřešena. Problém, který je zastoupen v issue s
id #1
, indikuje, že repozitář je prázdný. Napíšeme tedy
zprávu o nahrání souborů do repozitáře. Do textového pole napíšeme
Soubory do repozitáře byly nahrány
:
Issue uzavřeme klikem na šipku vedle tlačítka Close with comment:
Otevře se nám nabídka nabízející dvě výše popsané volby uzavření issue. Klikneme na Close as completed. Issue se uzavře a stránka se aktualizuje. Po této akci vidíme, že značka Open se změnila na Closed, což označuje uzavření issue. Současně je přidán náš komentář a identifikační značka signalizující uzavření issue:
Tímto jsme úspěšně vyřešili issue u našeho repozitáře.
Přehled základních příkazů
Nakonec si ještě znázorníme účinnost probraných základních Git příkazů na jednotlivé pracovní prostory:
V následujícím kvízu, Kvíz - Kolize mezi větvemi a vzdálený repositář v Gitu, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.