Git, Github

Programování v GIS 2

Jan Caha

2026-04-20

Co je Git?

  • systém pro správu kódu, jeho vývoje a verzí, který umožňuje sledovat změny v kódu a spolupracovat na projektech
  • umožňuje návrat k předchozím verzím, práci na více větvích a snadnou spolupráci mezi více vývojáři
  • je distribuovaný, což znamená, že každý vývojář má kopii celého repozitáře na svém počítači
  • existuje centrální repozitář (server), který slouží jako hlavní místo pro sdílení kódu

Autorizace uživatele

  • je třeba nastavit uživatelské jméno a e-mail, které budou použity pro identifikaci práce s Git
  • pro autorizaci na serveru je potřeba SSH klíč
  • SSH klíč je pár klíčů (veřejný a soukromý), které slouží k šifrování a dešifrování dat
  • veřejný klíč se nahrává na server, soukromý klíč zůstává na počítači uživatele
# nastavení jména a e-mailu
git config --global user.name "Jméno Příjmení"
git config --global user.email "email@example.com"

Git pojmy

  • repository (repozitář) - místo, kde je uložen kód a historie změn
  • branch (větev) - samostatná linie vývoje, která umožňuje pracovat na různých funkcích nebo opravách chyb nezávisle na sobě
  • commit - snímek stavu kódu v určitém okamžiku, který obsahuje popis změn od posledního commitu
  • merge - sloučení změn z jedné větve do druhé
  • conflict - situace, kdy dvě větve obsahují změny v té samé části kódu, a není jasné kterou změnu použít
  • stage area - dočasné místo, kde jsou změny připravené k potvrzení (commit)
  • pull request (PR) - návrh sloučení větve do jiné větve, umožňuje revizi kódu před samotným sloučením

Vytvoření repositáře

  • git init - inicializace nového repozitáře, ale pak je potřeba přidat vzdálený repozitář
  • git clone URL - klonování existujícího repozitáře, vytvoří se složka s názvem repozitáře a stáhne se jeho obsah

Synchronizace se serverem

  • git push - odeslání změn na vzdálený repozitář
  • git pull - stažení změn ze vzdáleného repozitáře a jejich sloučení s lokální větví
  • git fetch - stažení změn ze vzdáleného repozitáře bez sloučení (bezpečnější, změny lze nejdříve prohlédnout)
  • pokud stažené změny obsahují konflikty, je nutné je ručně vyřešit a potvrdit pomocí git add a git commit

Přehled stavu a historie

  • git status - zobrazí aktuální stav repozitáře (co je změněno, co je ve staging area)
  • git log - zobrazí historii commitů (autor, datum, zpráva)
  • git log --oneline --graph - zkrácená historie s grafem větví

Přidání změn

  • git add . - přidání všech změn do tzv. “staging area”
  • git add soubor.py - přidání konkrétního souboru
  • git commit -m "Popis změny" - vytvoření nového commitu

Práce s větvemi (branches)

  • větve umožňují pracovat na různých částech projektu nezávisle na sobě
  • hlavní větev se obvykle nazývá main nebo master
  • další větve mohou být vytvořeny pro nové funkce, opravy chyb nebo experimenty
  • branch se vytváří vždy z nějaké prvotní větve, obvykle z main nebo master
  • git branch nazev-vetve - vytvoření nové větve
  • git checkout nazev-vetve - přepnutí na existující větev
  • git checkout -b nazev-vetve - vytvoření a přepnutí na novou větev

Průběh práce s větví

gitGraph
    commit id: "počáteční stav"
    commit id: "příprava projektu"
    branch feature-1
    checkout feature-1
    commit id: "nová funkce (1)"
    commit id: "nová funkce (2)"
    checkout main
    commit id: "základní struktura"
    branch hotfix-1
    commit id: "oprava chyby"
    checkout main
    merge hotfix-1
    checkout feature-1
    commit id: "nová funkce (3)"
    checkout main
    merge feature-1 id: "sloučení"
    commit id: "vydání verze"

Sloučení větví

  • git merge nazev-vetve - sloučení změn z jiné větve do aktuální větve
  • při konfliktech je nutné je ručně vyřešit a následně potvrdit změny pomocí git add a git commit.

Smazání větve

  • git branch -d nazev-vetve - smazání větve, pokud byla sloučena
  • git branch -D nazev-vetve - vynucené smazání větve

Soubor .gitignore

  • definuje, které soubory a složky se nemají sledovat v Git
  • jeden soubor na řádek, podporuje zástupné znaky (*, **)
  • obsah se neverzuje (neukládá do repozitáře)
  • typicky: data, kompilované soubory, dočasné soubory, prostředí

Příklad .gitignore

# Python
__pycache__/
*.pyc
.mypy_cache/

# prostředí
.venv/

# data a výstupy
*.tif
*.shp
data/
output/

# IDE
.vscode/
.idea/

Doporučené postupy

  • pravidelně commitujte a pište srozumitelné zprávy commitů
  • používejte větve pro nové funkce nebo opravy chyb
  • před sloučením větví vždy aktualizujte hlavní větev (git pull)
  • nastavte .gitignore hned na začátku projektu - vyhnete se tak problémům s velkými soubory v historii

GitHub

  • webová služba pro hostování Git repozitářů
  • funkcionality postavené okolo Git + doplňky pro vývojáře
    • řešení problémů se softwarem (Issues)
    • tvorba vydání softwaru (Releases)
    • wiki, či hostování dokumentace (GitHub Pages)
    • CI/CD - automatizace postupů při vývoji softwaru (GitHub Actions)
  • sociální rozměr

Pull Request

  • návrh na sloučení větve do jiné větve
  • umožňuje revizi kódu kolegou před samotným sloučením
  • postup: vytvoření větve commit změn push větve otevření PR na GitHubu review merge
  • lze diskutovat změny přímo v kódu (komentáře k řádkům)
  • základ spolupráce na open-source i firemních projektech

GitHub - příkazová řádka

  • gh - příkazová řádka pro GitHub
  • jak management repositářů (alternativa k git), tak i další funkcionality na webu

Provázání s VS Code

  • skrze extenze
  • přímo v editoru, funkce práce s Git
  • může jít jak o jednoduchou práci s repositáři, tak i komplexní funkce GitHubu

GitHub Actions

  • automatizace pracovních postupů
  • CI/CD - Continuous Integration/Continuous Deployment
  • umožňuje spouštět skripty a akce na základě událostí v repozitáři
  • např. při pushnutí kódu, vytvoření pull requestu nebo vydání nové verze
  • umožňuje testování, nasazení a další úkoly
  • akce jsou definovány v YAML souborech a mohou být spouštěny na různých platformách
  • umožňuje vytvářet vlastní akce nebo používat akce od komunity
  • akce mohou být kombinovány do pracovních postupů (workflows), které definují sekvenci kroků, které mají být provedeny

Alternativy

Dotazy?