Git 2

7. hodina DVOP WBB


Matěj Cajthaml — SSPŠ

©

Opakování

K čemu slouží staging area?
Jaké stavy souborů Git určuje?
K čemu slouží DOCTYPE tag?
Čím se liší příkaz Git diff a Git diff --staged?
Jak založíme nový repozitář?

Pokročilá práce s Gitem

Přidávání více souborů najednou

  • -A — označí vše
  • . — označí vše v aktuální složce (rekurzivně)
  • -u — označí modifikace a smazání, bez nových souborů

Speciální soubory gitu

.gitignore

  • všechny soubory, které splňují pravidla nebudou přidávany a sledovány

Historie verzí

Historie verzí

  • často potřebujeme zobrazit, co se v repozitáři stalo
  • tento příkaz nám dovolí zobrazit commity, na které můžeme v dalších příkazech referovat
  • spousta přepínačů
  • záznam je chronologický (první záznam je poslední commit)

Historie verzí

Návrat do předchozího stavu

Připojení k minulému commitu

  • v posledním commitu chcete něco opravit
  • to, co je označené jako staged se vezme a přidá k minulému commitu
  • otevře se editor k opravě jména / lze zadat pomocí -m
  • nevytváří se nový commit

Odstranění označení staged

  • soubor, který do aktuálních změn nechceme zahrnout
  • nemaže změny

Resetování aktuálně změněného souboru

  • resetuje soubor do poslední revize daného souboru
  • aktuální stav bude nenávratně smazán

Vzdálené repozitáře

Práce se vzdálenými repozitáři

  • Git využíváme skoro vždy pro práci v týmech
  • kopírování složky Gitu je špatné a náročné
  • do repozitáře si můžeme nalinkovat různé cizí repozitáře s internetem a s nimi komunikovat
  • vzdálené repozitáře můžeme přejmenovávat i smazat

Vzdálené repozitáře existují v odděleném prostředí. Změnami ve working directory je nemůžeme ovlivnit.

Získání kódu ze vzdáleného repozitáře

  • NEOVLIVŇUJE lokální repozitář či working directory, jen se stáhnou

Klonování repozitáře

  • místo založení lokálního repozitáře si můžeme naklonovat repozitář z internetu
  • automatické spojení
  • můžeme nahrávat změny
  • HTTPS / SSH

Git vs. Gitové služby

  • Git je verzovací nástroj
  • GitHub, GitLab a další jsou služby, které Git uvnitř používají
  • tyto služby nabízejí hostování repozitáře a další nástroje

Větve

Jak se na sebe vážou commity?

Větve

  • oddělení od hlavního vývoje (vlastní prostředí)
  • neovlivňujeme ostatní větve (např. produkci)
  • větve UKAZUJE na nějaký commit (serii snímků), který označuje posledni jeho stav

Větev, která se vytvoří na začátku (main / master) nemá žádné speciální funkčnosti.

Vytvoření větve

  • založí novou větev ale nepřepne do ni
  • jedná se o LOKÁLNÍ větvi
  • větev můžeme kdykoliv smazat pomocí přepínače -d / -D

Přepnutí do jiné větve

  • přepne do nové větve, ve které budeme dělat změny
  • musíme resetovat soubory (i staged)
  • resetuje soubory do daného posledního commitu v dané větvi

Co se stane, když přepneme do nové větve, když máme nějaké rozpracované soubory?

Jak Git ví, v jaké větvi se aktuálně nacházíte?

Značka HEAD

  • odkazuje na aktuální větev
  • uvnitř git log můžeme vidět odkazy na HEAD a větve

Při vytvoření commitu ve větvi se rozdělí (rozběhne) historie. Pomocí git log --graph --all zobrazíme celý seznam.

Ukázka práce v repozitáři

  1. Založit repozitář pro imaginární stránku.
  2. Vytvoříme základní strukturu.
  3. Pro novou změnu (přidání kontaktu) vytvoříme novou větev a začneme na ni pracovat.
  4. Přidáme část kontaktu a commitneme.
  5. Mezitím se nám dostala informace o okamžitém opravení hlavní verze (typo / legal issues).
  6. Vrátíme se do hlavní větve, vytvoříme novou větev, chybu opravíme a commitneme.
  7. Spojíme novu větev s hlavní větví.

Slučování větví

Slučování větví

  • proces, kdy změny v jedné větvi spojíme do druhé
  • spojujeme zadanou větev do AKTUÁLNÍ VĚTVE

Slučování může být jednoduché (jen se posune ukazatel větve) a nebo složitější, které vytváří speciální commit.

Merge conflict

  • = konflikt při slučování
  • nastane, když v různých revizí změníte stejnou část souboru a Git neví, co udělat
  • musí se vyřešit ručně (nebo pomoci GUI)

Všechny nevyřešené merge conflicty lze vidět pomocí git status. Až soubory opravíte, můžete se slučováním pokračovat pomocí git commit.

Zobrazení větví

Vzdálené větve

  • název <jméno vzdáleného repozitáře>/*
  • lze je smazat
  • pokud na vzdáleném repozitáři lokální neexistuje, musíme ji při git push vytvořit

Nahrání změn

  • na vzdálený repozitář (větev) potřebujeme odeslat změny
  • před odesláním musíme změny získat (implementovat) pomocí git fetch

Získání změn a jejich začlenění

  • git fetch změny jen stáhne
  • tento příkaz je stáhne a implementuje do pracovního adresáře
  • reálně se jedná o příkazy git fetch a git merge

Git je verzovací nástroj, který nám dovoluje hlídat verze. Jak se můžeme vrátit k nějaké revizi?

Shrnutí

Jak odešleme změny z lokálního repozitáře na vzdálený?
Jak se můžeme vrátit k nějaké revizi (commitu) v Gitu?
Jakými způsoby můžeme napsat barvy v CSS?
Jak stáhneme změny ze vzdáleného repozitáře?
Jaké znáte přepínače na příkazu git log?
Co udělá v souboru .gitignore zápis "!test*"?

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/