IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 12 - Git - Vzdálený repositář - Práce s repositářem

V minulé lekci, Git - Vzdálený repositář - Vytvoření a nastavení repositáře, jsme si vytvořili vzdálený repositář a ukázali 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 repositář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ý repositář

V lekci Vzdálený repositář - Vytvoření a nastavení repositáře jsme si vytvořili odkaz z našeho lokálního repositáře na repositář vzdálený. Nyní tento odkaz využijeme k nahrání a stáhnutí aktualizací ze vzdáleného repositáře do našeho lokálního repositáře.

Soubory do vzdáleného repositář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 repositáře.

Zaslání souborů přes Git

Pro nahrání souborů do vzdáleného repositář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 repositáře. Náš lokální repositář 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 repositáře na platformě GitHub a aktualizujeme stránku. Náš repositář se aktualizoval podle posledně provedeného commitu z lokálního repositáře:

Aktualizovaný repositář - 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 repositář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 repositář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. Repositář 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 repositáře:

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

GitHub automaticky použije soubor README.md jako stručnou dokumentaci.

Stáhnutí aktualizací ze vzdáleného repositáře

Nyní si předvedeme, co se stane, když se pokusíme nahrát změny z našeho lokálního repositáře na ten vzdálený, který již má jiné změny.
Nejdříve náš lokální repositář upravíme. Spustíme níže uvedené příkazy, kterými upravíme soubor testovaci_soubor.txt v našem lokálním repositáři. Poté vytvoříme commit a pokusíme se nahrát změny na náš vzdálený repositář 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 repositáře, neboť ten obsahuje změny, které v našem lokálním repositáři nejsou dostupné. Nejprve si tedy musíme tyto změny stáhnout do našeho lokálního repositář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 repositářů 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 repositář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í repositář aktualizovaný. Spustíme příkaz git push origin main, kterým nahrajeme poslední commit na vzdálený repositář:

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 repositáři 😀

Uzavření issue u vzdáleného repositáře

V lekci Vzdálený repositář - Vytvoření a nastavení repositář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 repositář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áš repositář:

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 repositář je prázdný. Napíšeme tedy zprávu o nahrání souborů do repositáře. Do textového pole napíšeme Soubory do repositář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 repositář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ý repositář - Vytvoření a nastavení repositář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í:
19 hlasů
.
Aktivity