Warning
This page is located in archive.

GIT (1/2) - instalace a nastavení

Git lze stáhnout z oficiální stránky git-scm.com a vybrat si příslušnou distribuci. Pro linuxové uživatele (Ubuntu a podobné distribuce) stačí git nainstalovat z příkazové řádky pomocí:

sudo apt update
sudo apt install git
pozn. U Windowsové verze doporučujeme integrovat GIT do kontextové nabídky v průzkumníku. Dále zachovat konce řádků, co doporučuje instalace (desktop CRLF, server LF). Vyhnete se tím potom s problémy při kompilaci programu mezi různými platformami.

Vytvoření klíče pro komunikaci se serverem

Každý poskytovatel GITích služeb umožňuje obousměrnou komunikaci se serverem z důvodu synchronizace změn. Existují dvě možnosti, kde první, méně používáná, je přes HTTP(s) protokol, která pokaždé vyžaduje zadání uživatelského jména a hesla. Druhá běžně používaná metoda je pomocí SSH klíče, která zajišťuje autentizaci se serverem bez zadání uživatelského jména a hesla. Následující příklad vytvoří dostatečně bezpečný SSH klíč pro komunikaci se serverem.

ssh-keygen -t rsa -b 4096 -C "username@fel.cvut.cz"
Přepínač -t vybírá typ klíče (v našem případě RSA, může se použít i DSA, ed25519, … pokud jsou podporovaný) a délku 4096 bitů pomocí přepínače -b, který zabezpečí dostatečnou robustnost klíče. Další info na webu https://ssh.com.

Při vytváření klíče lze použít Enter na všechny volby. Lze ovšem klíč dále zabezpečit ještě heslem (passphrase).

Jelikož autentizace pomocí SSH klíčů probíhá na obou stranách, výstupem jsou dva soubory. Prvním souborem je soukromý klíč id_rsa, který zůstává u uživatele na počítači a nikdy se nikam a nikomu nekopíruje. Jeho účelem je ověření totožnosti uživatele. Druhý soubor je id_rsa.pub, který je označován jako veřejný klíč a nahrává se na server, se kterým chceme komunikovat. Veřejný klíč slouží serveru k identifikaci konkrétního uživatel, který drží klíč soukromý. Dobrou praxí je, že každé zařízení má svůj vlastní soukromý klíč a který existuje vždy právě jeden. Soukromým klíčem se jednoznačně identifikujete u všech autorit, kterým jste dali veřejný klíč. Ty naopak je možné nahrát všude, kam chcete s daným zařízením přistupovat.

Pokud pracujete v operačním systému Windows, lze RSA klíč vytvořit např. pomocí PuTTYgen. Pěkný tutoriál je např. zde.

Spárování zařízení a účtu na GitLabu

Abyste mohli repozitáře stahovat nebo i nahrávat, je třeba spárovat Vaše zařízení se serverem. To provedete tak, že se přihlásíte na stránku https://gitlab.fel.cvut.cz pomocí SSO. Ve Vašem profilu (vlevo nahoře) zvolte Preferences a následně nalevo nabídku SSH keys. Do pole Key zadejte obsah souboru id_rsa.pub a do Title zadejte název zařízení, abyste mohli identifikovat o jaký klíč se jedná. Dáte možnost si nastavit dobu expirace, která je v základu 1 rok. Osobně doporučujeme dobu expirace ponechat zadanou, neboť když daný klíč nepoužíváte nebo už neexistuje, tak zde poté není bezpečnostní hrozba, že by se privátní klíč mohl dál používat.

Klíč otevřete na svém počítači v libovolném textovém editoru (včetně řádkových cat, more nebo less) a zkopírujte obsah souboru na web do pole Key.

Pokud už na GitLabu Váš klíč používáte, nepůjde přidat. GitLab, GitHub, … povolují pouze jednu instanci daného klíče, protože je jasnou identifikací uživatele.

Základní práce s GITem

Obecné info

Samotná práce s GITem není nic složitého než verzování vlastního kódu a případně synchronizace kódů mezi počítačem a serverem. Slovo “případně” tam je schválně, neboť samotný repozitář může být pouze na vlastním počítači a nemusí se nikam nahrávat na server. V případě nahrání repozitáře na server tak máte potom jistotu, že Vaše kódy budou zálohované. V případě smazání nebo poškození serveru nemusí být kódy ztraceny. Pokud máte totiž kompletní historii uloženou na vlastním počítači (do doby, kdy jste provedli poslední synchronizaci), je potom celkem jednoduché obnovit celý repozitář.

Další výhodou verzování kódu je možnost spolupráce více programátorů na jednom projektu. Zde už je potřeba ukládat kódy na server a mít alespoň jednoho správce, který bude rozhodovat jak bude výsledný kód vypadat. Jelikož dva programátoři mohou upravovat stejný kód s jiným výsledkem, zde je potom potřeba rozhodnout, který kód se použije a případně jak se upraví, aby projekt šel zkompilovat a fungoval jak má. Tomuto kroku se říká takz. merge, případně merge request pro platformu GitLAB nebo pull request u platformy GitHub.

pozn. Veškeré popisy se vztahují jak na Windows platformu, tak Linux. U Windows platformy existuje ještě grafická nadstavba, ale ta tu nebude popsána a na cvičeních nebude využívána.

První použití GITu

V případě, že jste GIT nikdy nepoužil/a, je třeba nastavit globální nastavení v podobě jména a příjmení a emailu. To se provede následujícími příkazy:

git config --global user.name "Jmeno Prijmeni"
git config --global user.email "username@fel.cvut.cz"
Pokud používáte již GIT a chcete specifikovat uživatele pro konkrétní repozitář, toto nastavení provedete následujícími příkazy:

cd slozka_s_repozitarem
git config user.name "Jmeno Prijmeni"
git config user.email "username@fel.cvut.cz"

Inicializace a klonování repozitáře

Na začátku máte dvě možné situace, které mohou nastat:

  1. Repozitář neexistuje a je třeba jej vytvořit
  2. Repozitář existuje a je třeba jej zkopírovat, tzv. naklonovat

Inicializace repozitáře

Když neexistuje repozitář, který chcete použít nebo začínáte nový projekt, je třeba repozitář vytvořit. To se provede v příkazové řádce následujícími příkazy:

cd slozka_kde_bude_repozitar
git init
Pokud se rozhodnete lokálně vytvořený repozitář synchronizovat se serverem (musí být nově vytvořený repozitář), bude třeba použít následující postup příkazů (doporučený postup):

cd slozka_kde_je_repozitar
git remote rename origin old-origin
git remote add origin git@gitlab.fel.cvut.cz: ...
git push -u origin --all
git push -u origin --tags

Klonování repozitáře

Pokud je repozitář veřejný a je nabízen např. pomocí HTTP(S) protokolu (typicky projekty na github.com), je možné ho naklonovat následovně:

git clone https://www.github.com/...

V případě privátních repozitářů je obvyklým způsobem využití SSH, zpravidla tak, že se na server s repozitářem se nejprve uloží privátní klíč uživatele (viz. postup výše). Tento způsob budeme používat při práci s fakultním serverem gitlab.fel.cvut.cz.

git clone git@gitlab.fel.cvut.cz: ...

Práce se vzdáleným repozitářem

Pokud má být repozitář synchronizovaný se serverem, je třeba ještě říci kde se server nachází. Je třeba nastavit tzv. remote uživatele následujícím příkazem (adresa git@gitlab.fel.cvut.cz:B192_B2B99PPC/tutorials.git se může lišit):

git remote add origin git@gitlab.fel.cvut.cz:B192_B2B99PPC/tutorials.git

Vizualizace repozitáře

Existuje mnoho možností a nástrujů, jak vizualizovat strukturu repozitáře. V následující kapitole se budeme věnovat programu gitk, který je standardně součástí každé distribuce GITu. Jeho účelem je procházet jednotlivé změny, kdo, kdy je udělal a jaké soubory se změnily. Je dovoleno pracovat na stejném repozitáři ve více lidech, poté by zde bylo vidět i rozvětvení a sloučení (merge) v jednu větev.

Program gitk lze spustit bez parametrů nebo i s parametry. Pár základních je sepsáno níže:

  • gitk vizualizuje kompletní strukturu současné větve
  • gitk --all vizualizuje všechny dostupné větve v repozitáři
  • gitk -t [tag] vizualizuje větev do štítku tag
  • gitk -b [branch] vizualizuje vizualizuje větev branch

Na následujícím obrázku znázorněno, jak vypadá příklad vizualizace tohoto repozitáře a jednotlivé části dialogu jsou popsány níže:

  1. Červená tečka na začátku značí aktuální pozici s rozpracovanými soubory
  2. Commit, ze kterého se odvíjí současný stav programu (větve) označen žlutou tečkou. Na tomto řádku je také přiřazen tag pr_tagu, který je vizualizovaný žlutou vlaječkou. Dále je zde vizualizace, kde skončila větev master lokálně a větev origin/master uloženou na serveru. Může se stát, že se provede několik commitů bez synchronizace se serverem a větev origin/master bude níže.
  3. Tato pozice ukazuje označený commit (5) a zobrazené změny (8) v jednotlivých souborech (7), které se provedly v porovnání s předchozím commitem kým a kdy (4).
  4. Uživatel, který provedl změny a kdy
  5. Číslo commitu, který by měl být jedinečný (teoreticky i na světě) a pomocí tohoto ID je poté možno se vracet k dané změně pomocí příkazu git checkout [ID]
  6. Změněné soubory vůči předchozímu commitu
  7. Hlavička commitu, který byl předchozí commit, kdo a kdy jej provedl apod.
  8. Změny v jednotlivých souborech (-) značí odebraný řádek, (+) značí přidaný řádek. V případě změny na řádku, bude existovat pár (-) a (+) se změnamy

Přes pravé tlačítko myši lze nastavovat vlastnosti bez použití příkazové řádky, jako je přiřazení tagu, porovnání dvou commitů apod.

courses/b2b99ppc/howtos/git.txt · Last modified: 2024/02/15 13:13 by nentvond