Git 1

5. hodina DVOP WBB


Matěj Cajthaml — SSPŠ

©

Opakování

Jaké základní protokoly se využívají pro webové stránky?
Proč se nesmí křížit tagy v HTML?
K čemu slouží tag sub, sup, i a u?
Jaké známe selektory v CSS?
Co to znamená kaskáda? Jak se projevuje v CSS?

Verzovací systémy

Verzovací systém

  • = version control
  • správa změn projektu
  • revize
  • často i v jednotlivých službách

Na jaké typy projektů používáme verzovací systémy?

Proč bychom potřebovali verzovat projekt?

Je např. klasické kopírování složek verzovací systém?

Způsoby práce ve verzovacích systémech

Zamykání souborů

  • soubor / projekt
  • pouze jeden člověk může pracovat
  • ochrana proti zásahu ostatních

Spojování změn

  • může pracovat více lidí najednou
  • změny se poté spojí
  • problémy se spojením — změny ve stejném místě
  • tzv. merge-conflict (příští hodiny)

Na jaké typy projektů se hodí zamykání souborů a spojování změn?

Umístění verzování

  • centralizované (centralized)
  • decentralizované (decentralized)
  • distribuované (distributed)

  • komunikace se serverem jen, když je potřeba

Historie verzí

  • lineární — každá verze závisí na předchozí
  • grafový — orientovaný acyklický graf, kde z jedné verze může existovat více verzí, které se mohou spojit

Známé verzovací systémy

  • Git
  • Subversion
  • CVS
  • Bazaar

Git

Git

  • verzovací systém
  • opensource
  • velmi populární
  • vytvořeno v roce 2005, Linus Torvalds, Junio Hamano
  • HTTP, FTP, SSH, ...

Cíle Gitu

  • být jednoduchý
  • podporovat distribuované použití
  • být zdarma
  • být rychlý
  • ochránit proti ztrátě dat

Charakteristiky

  • data se po odeslání jen tak neztratí
  • jednotlivé změny jsou závislé na celém repozitáři
  • každý objekt v Gitu je označen jednoznačným identifikátorem pomoci SHA-1
  • různé OS, systémy a jazyky
  • Git při většině akcí nekomunikuje se sítí a proto rychlost závisí jen na HW

Git neukládá změny, ale jejich snímky. Pokud se v dané verzi nezměnil, je uložen odkaz na jeho předchozí verzi.

Časti Gitu

  • working directory — pracovní adresář
  • staging area — připravené změny
  • Git directory — složka pro Git

Pro jakoukoliv práci s Gitem je potřeba mít nainstalovaný Git v příkazové řádce (CLI). Git je pro jednoduchost podporován i s grafickým designem (GUI) — ty prozatím používat nebudeme.

Instalace

  • Git-scm
  • po instalaci je nutné nastavit Vaše jméno a e-mail
  • pro vše se používá příkaz git, který má podpříkazy

Nastavení osobních informací

Zobrazení nastavení

Nápověda

Cílem této a následující hodiny není, abyste si zapamatovali všech ~150 příkazů, ale abyste uměli používat každý den základní sadu cca 30 příkazů.

Repozitář

Repozitář

  • samotný projekt
  • musíme vytvořit nebo klonovat z internetu
  • sleduje veškeré změny projektu od počátku

Vytvoření repozitáře

  • v aktuální složce založí repozitář
  • mohou existovat již soubory / projekt
  • vytvoří složku .git

Ve složce .git se nachází veškeré verze souborů (tj. snímky) a informace o repozitáře. Smazáním této složky přijdete o lokální kopii verzí.

Commit

Commit

  • jedná se o balíček změn
  • zaznamenané, ukončené (a připravené k odeslání)

Stav souborů

  • untracked — nesledované, nový soubor
  • unmodified — sledovaný soubor, který se ale ve verzi nezměnil
  • modified — sledovaný soubor, který se od poslední revize změnil
  • staged — sledovaný soubor, který je připraven ke commitu

Zjištění stavu souborů

  • zobrazuje status všech souborů projektu bez unmodified

Zjištění stavu souborů

  • označí daný soubor jako staged

Staged!

Práce

1. V repozitáři si vytvořte soubor test.txt a vložte do něj své křestní jméno. Daný soubor označte jako staged. Co se nachází ve výstupu příkazu git status?

2. Upravte soubor test.txt aby obsahoval na více i Vaše příjmení. Co se nachází ve výstupu příkazu git status?

Při označení souboru jako staged pomocí git add <soubor> se označí daný stav souboru a ne soubor samotný. Jeho změny v budoucnu již nebudou jako to-be-commited označeny.

Jak uděláme, aby i další změny byly zaznamenané a označené jako staged?

Vidíte v příkazu git status nějaký problém?

Kompletní zobrazení změn

  • zobrazí změny dle jednotlivých řádek
  • formát tzv. patch
  • přepínač --staged

Zapsání změn

Zapsání změn

  • (to) commit
  • zapsání staged souborů jako revizi
  • každý commit má:
    • jméno (a případně popis)
    • časovou značku
    • identifikátor dle SHA-1
    • kdo jej vytvořil

Commit

  • bez uvedení názvu se otevře editor, kde jméno lze zadat
  • jak se správně mají commity jmenovat si řekneme příště

Po commitu se vyčistí staged soubory a cyklus může pokračovat.

Smazání a přesouvání souborů

Práce

Umí Git zaznamenat přesunutí souboru?

Jak v Gitu smažeme soubor?

Shrnutí

Co se nachází ve složce .git?
Jako uložíme změny (tj. staged soubory)?
Co to znamená, že je něco distribuované?
Co je to digitální stopa?
Jak se liší styl zamykání souborů a slučování změn?

Děkuji za pozornost!

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