NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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:

Aktualizovaný repozitář - Git

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:

Menu pro nahrání/vytvoření souboru - Git

Otevře se nám tento editor souboru:

Editor souboru - Git

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:

Vytvoření souboru README.md - Git

Soubor vytvoříme kliknutím na Commit changes…:

Vytvoření souboru README.md - Git

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:

Vytvoření commitu - Git

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:

Aktualizovaný repozitář po vytvoření README.md - Git

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:

Tlačítko pro otevření Issues - Git

Otevře se nám stránka se všemi issues vytvořenými pro náš repozitář:

Seznam všech Issue - Git

Kliknutím na Testovací issue si jej otevřeme:

Detail nového Issue - Git

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:

Napsání komentáře do Issue - Git

Issue uzavřeme klikem na šipku vedle tlačítka Close with comment:

Menu pro výběr typu zrušení. - Git

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:

Issue po uzavření - Git

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:

Git

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í.


 

Předchozí článek
Git - Vzdálený repozitář - Vytvoření a nastavení repozitáře
Všechny články v sekci
Git
Přeskočit článek
(nedoporučujeme)
Kvíz - Kolize mezi větvemi a vzdálený repositář v Gitu
Článek pro vás napsal Filip Studený
Avatar
Uživatelské hodnocení:
35 hlasů
.
Aktivity