Programování 1 – 8. cvičení

Git

Instalace

Poznámka: na labových počítačích je Git už nainstalovaný.

Jděte na https://git-scm.com/downloads a vyberte si váš operační systém.

Instalace na Windows má grafické rozhraní, kde si můžete vybrat některá nastavení. Moje doporučení je brát výchozí hodnoty kromě:

Po instalaci možná bude potřeba zavřít a znovu otevřít váš terminál (případně textový editor), aby v něm začal fungovat příkaz git -v.

Prvotní nastavení

Aby Git mohl zaznamenávat, kdo udělal kterou změnu, musíte si nastavit svoji identitu pomocí příkazů:

Přihlášení do MFF GitLabu

MFF GitLab najdete na adrese https://gitlab.mff.cuni.cz/. Pro přihlášení do Username zadejte vaše přihlašovací jméno do SISu (např. topfermi; ne vaše číslo) a Password je vaše heslo do SISu.

Poznámka: používáme MFF GitLab, což je něco jiného než GitLab.com.

Vytvoření projektu

Po přihlášení do GitLabu si můžete vytvořit nový projekt (modré tlačítko New Project vpravo nahoře). Zvolte Create blank project a na další stránce ho pojmenujte a vyberte, kam se má uložit: v Project URL zvolte vaše uživatelské jméno (v sekci Users).

Stažení projektu (clone)

Jsou dvě možnosti, jak přistupovat ke GitLabu a stáhnout si odtamtud váš projekt (a později tam taky nahrát změny, které uděláte):

VAROVÁNÍ

Credential Manager automaticky ukládá vaše heslo, což není bezpečné, pokud počítač používá více lidí (jako třeba ten v labu). Proto je lepší místo hesla používat access token. Navíc u něj jde nastavit, že má platit je po omezenou dobu. Token jde vytvořit buď

  • pro jeden konkrétní projekt (otevřete si projekt, v levém menu zvolte Settings, Access Tokens, pak Add new token, Select a role nastavte na Maintainer a v Select scopes vyberte write_repository; pokud byste chtěli víc podrobností, jděte do dokumentace), nebo
  • pro celý váš účet (klikněte na váš obrázek vlevo nahoře, Preferences, Access Tokens, pak Add new token a v Select scopes vyberte write_repository; dokumentace).

Pokud byste potřebovali vymazat vaše přihlašovací údaje, tak na počítačích s Windows (tedy třeba v labu) jděte do Ovládací panely (Control Panel) / Uživatelské účty (User Accounts) / Spravovat přihlašovací údaje (Credential Manager) / Přihlašovací údaje systému Windows (Windows Credentials) / Obecné přihlašovací údaje (Generic Credentials) a tam najděte git:https://gitlab.mff.cuni.cz a smažte.

Pro stažení projektu z GitLabu na stránce projektu klikněte na modré tlačítko Clone a zkopírujte si adresu z Clone with HTTPS. V terminálu si otevřete složku, kam projekt chcete uložit, a spusťte příkaz git clone ADRESA (např. git clone https://gitlab.mff.cuni.cz/topfermi/zasobnik.git). Mělo by se vám otevřít okno, kam zadáte jméno a access token (nebo heslo) a pak by se váš projekt měl stáhnout do nové složky. Pokud se vám nedaří přihlásit, můžete použít access token přímo v adrese: git clone https://USERNAME:TOKEN@gitlab.mff.cuni.cz/topfermi/zasobnik.git (dokumentace).

Pokud se vám nechce pracovat s terminálem, můžete po kliknutí na Clone zvolit Visual Studio Code (HTTPS), což vám dovolí vybrat, kam se projekt uloží, z grafického rozhraní.

Poznámka: na labovém počítači mi nefungovalo stažení projektu na síťový disk (např. Z:). Nicméně na lokálním disku D: mi to fungovalo bez problémů.

Ignorování souborů

Některé soubory nechceme ukládat na server (třeba zkompilované programy, pomocné soubory našeho editoru, ...). Nejjednodušší způsob, jak to udělat, je pomocí souboru .gitignore. Pro Python si stáhněte soubor Python.gitignore (pro další jazyky jsou doporučené soubory tady). Po stažení ho přesuňte do kořenové složky vašeho projektu a přejmenujte na .gitignore (tedy odeberte z názvu staženého souboru slovo "Python", ale tečku a vše za ní tam nechte).

Uložení změn

Ve VS Code můžete s Gitem snadno pracovat ze záložky Source Control (levé menu). Pomocí tlačítka + (Stage changes) vyberte soubory, které chcete uložit. Pak do Message napište popis změn a klikněte na Commit, čímž se aktuální změny uloží jako nová verze projektu. Následně pomocí tlačítka Sync changes nahrajete tyto změny i na GitLab.

Pokud by vám nějaké z tlačítek nefungovalo nebo byste potřebovali operace udělat ručně, odpovídající příkazy jsou:

Další užitečné příkazy případně najdete v taháku nebo se je dozvíte v LS na Úvodu do Linuxu.

Cvičení na Git

Nainstalujte si Git a vyzkoušejte si, že vám z vašeho počítače jde stáhnout a nahrát projekt na GitLab. Budete to potřebovat, až budete pracovat na svém zápočtovém programu. Podrobnější instrukce jsou v ReCodExu.

Stream

Představte si, že chcete společné rozhraní pro vstupně-výstupní komunikaci (pro jednoduchost pouze textovou) – tedy pro objekty, ze kterých jde číst (metoda read) a jde do nich zapisovat (metoda write). Příklady takových objektů jsou třeba soubory (čtení/psaní z/do souboru) nebo síťová komunikace přes TCP/IP (přijímání/posílání zpráv po síti). Společné rozhraní nazveme Stream.

Zkuste tento příklad zapsat v Pythonu za pomoci abstraktní třídy Stream s metodami read (přečte a vrátí textový řetězec) a write (dostane textový řetězec a zapíše ho). Vytvořte několik tříd dědících od Stream, například:

Cílem příkladu je jen vyzkoušet si zapsat definice tříd a dědičnosti. Místo skutečné implementace metod read a write v nich jen udělejte print (a vraťte hodnotu správného typu).

Výhodou společného rozhraní pro streamy je, že zbytek programu nemusí vůbec řešit, jestli data dostává od uživatele nebo ze souboru nebo po síti. Zkuste si pak zavolat následující metodu s různými streamy:

write_data(stream: Stream):
    stream.write("data")

Struktura tříd je znázorněna také na následujícím UML diagramu:

Struktura tříd pro Stream

Pozn.: Příklad vychází ze třídy Stream v implementaci .NET.