Git jednoduše

Návod krok za krokem – od instalace Gitu a propojení s GitHubem (GitLab, Bitbucket) přes založení projektu až po každodenní práci a řešení nejčastějších chyb.

Vladimír NeporAutorIng. Vladimír Nepor
Publikováno

Jednou na počítači

1. Instalace a globální nastavení

Stáhněte instalátor z git-scm.com, nebo v PowerShellu spusťte:

winget install --id Git.Git -e --source winget

Výchozí volby instalátoru jsou v pořádku.

Kontrola – vypíše nainstalovanou verzi

git --version

Identita autora commitů

Každý commit nese jméno a e-mail autora. Vyberte, jak je chcete spravovat:

Identitu nastavíte v každém projektu zvlášť (krok 3.3). Při práci pod více účty nebo na projektech s různou úrovní zabezpečení nemusíte nic přepínat a nikdy necommitnete pod špatným účtem.

Nastavení

git config --global user.useConfigOnly true

Git pak commit odmítne, dokud projekt nemá identitu. Bez tohoto řádku by si ji mohl domyslet ze systému (např. uzivatel@nazev-pc) a commitnout bez dotazu.

Kontrola – prázdný výstup = v pořádku

git config --global user.name
git config --global user.email

Vypsalo se jméno nebo e-mail? Odstraňte je:

git config --global --unset user.name
git config --global --unset user.email

Jednou na počítači

2. Propojení s GitHubem

GitHub a jiné webové Git služby vyžadují SSH klíč (nebo Personal Access Token). Každý GitHub účet má vlastní klíč a vlastní alias, přes který se k němu připojujete. Na jednom PC tak může být současně napojeno více účtů a nic se nepřepíná.

Zadejte své účty – příkazy ve všech krocích níže se podle nich upraví.

Vaše údaje – příkazy v krocích níže se podle nich upraví

Název účtu
1

Vygenerujte SSH klíč

ssh-keygen -t ed25519 -C "my-pc" -f ~/.ssh/github_account1

Pro každý účet vznikne vlastní klíč. Heslo ke klíči (passphrase) doporučujeme – chrání klíč, kdyby se dostal do cizích rukou.

2

Přidejte klíč do SSH agenta

Přidává se privátní klíč (= soubor bez koncovky .pub).

eval $(ssh-agent -s)
ssh-add ~/.ssh/github_account1
3

Vložte veřejný klíč do GitHub účtu

do účtu account1 (GitHub):

cat ~/.ssh/github_account1.pub

Každý klíč vypište, zkopírujte a vložte do příslušného účtu:

  1. Přihlaste se do účtu a otevřete github.com/settings/keys (záložka SSH and GPG keys).
  2. Klikněte na New SSH key, pojmenujte ho podle PC a vložte zkopírovaný klíč.
Pozor

Na GitHub patří jen veřejný klíč – soubor s koncovkou .pub. Soubor bez koncovky je privátní klíč a nikdy ho nikam nevkládejte.

4

Přiřaďte klíč k účtu (SSH config)

Otevřete soubor ~/.ssh/config (Windows: C:\Users\<vy>\.ssh\config, bez koncovky). Pokud neexistuje, vytvořte jej. Config je poskládaný z vašich účtů – stačí ho zkopírovat a vložit:

# GitHub account1
Host github-account1
  HostName github.com
  User git
  IdentityFile ~/.ssh/github_account1
  IdentitiesOnly yes

Host je alias, který pak používáte místo github.com. IdentitiesOnly yes zajistí, že se k účtu použije jen jeho klíč – jinak by SSH mohl nabídnout klíč jiného účtu z agenta a GitHub by vás přihlásil pod ním.

5

Otestujte připojení

ssh -T git@github-account1

Při prvním připojení potvrďte otisk serveru napsáním yes. Úspěch poznáte podle odpovědi se jménem správného účtu:

Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.

Místo toho Permission denied (publickey)?

Postup řešení najdete v častých chybách.

GitLab nebo Bitbucket?

Postup je stejný, jen u účtu na začátku sekce zvolte službu. Klíč vložíte v GitLabu v Preferences → SSH Keys, v Bitbucketu v Personal settings → SSH keys.

Pro každý projekt

3. Nový projekt

1

Vytvořte repozitář na GitHubu

Klikněte na New repository, zadejte název a zvolte, zda bude veřejný, nebo soukromý. Je-li projekt na GitHubu už hotový, tento krok přeskočte.

2

Propojte ho se složkou v počítači

Adresu repozitáře najdete na GitHubu pod Code → SSH. github.com v ní nahraďte aliasem účtu (github-account1) – příkazy níže už ho obsahují.

Při vytváření na GitHubu zaškrtněte Add a README file. Pak repozitář stáhněte – vytvoří se složka projektu a propojení se nastaví samo:

git clone git@github-account1:<uzivatel>/<repozitar>.git
cd <repozitar>

Kontrola – vypíše, kam je projekt napojený

git remote -v

Vede jinam, než má (např. github.com místo aliasu)? Změňte adresu:

git remote set-url origin git@github-account1:<uzivatel>/<repozitar>.git
3

Nastavte lokální identitu

Bez globální identity (krok 1) je tento krok povinný. S globální identitou ho použijte jen tam, kde chcete commitovat pod jinou.

Nastavení – uvnitř složky projektu

git config user.name "Jan Novák"
git config user.email "jan@example.com"

Použijte e-mail z GitHub účtu, do kterého projekt patří – jinak se commity nepřiřadí k vašemu profilu.

Kontrola – vypíše identitu, pod kterou budete v projektu commitovat

git config user.name
git config user.email

Vypsalo se něco jiného, než čekáte? Zjistěte, odkud hodnota pochází:

git config --list --show-origin
4

První commit a push

Nejdřív .gitignore

Ujistěte se, že máte v kořeni projektu soubor .gitignore se vším, co do repozitáře nepatří (node_modules/, .env, výstupy buildu…). Hesla a klíče, které se jednou dostanou do historie, se odstraňují velmi obtížně. Hotové šablony najdete na github.com/github/gitignore.

git add .
git commit -m "První commit"
git push -u origin main
PříkazCo dělá
git add .Označí změněné soubory pro commit (kromě těch v .gitignore).
git commit -mVytvoří commit s popiskem.
git push -u origin mainOdešle commity na GitHub. -u stačí jen poprvé – příště jen git push.

Průběžně

4. Každodenní práce

Běžná práce je pořád stejný cyklus čtyř kroků:

  1. 1.git pullStáhne změny ostatních.
  2. 2.git add .Označí vaše změny.
  3. 3.git commit -m "…"Uloží je s popiskem.
  4. 4.git pushOdešle je na GitHub.
Nevíte, v jakém stavu jste?

Spusťte git status. Ukáže změněné soubory a napoví i další krok.

Přehled příkazů

PříkazK čemu slouží
Stav a historie
git statusCo se změnilo a co je připraveno ke commitu.
git diffKonkrétní změny v souborech.
git log --onelineStručná historie commitů.
Větve
git switch -c <vetev>Vytvoří novou větev a přepne na ni.
git switch mainPřepne zpět na hlavní větev.
git merge <vetev>Sloučí větev do té aktuální.
git push -u origin <vetev>První odeslání nové větve na GitHub.
Vrácení změn
git restore <soubor>Zahodí neuložené změny v souboru.
git restore --staged <soubor>Vrátí soubor z git add (změny zůstanou).
git commit --amendOpraví poslední commit – jen pokud ještě nebyl odeslán.

Průběžně

5. Časté chyby

Author identity unknown *** Please tell me who you are.

Projekt nemá nastavenou identitu – bez globální identity je to očekávané. Nastavte ji lokálně (krok 3.3).

Permission denied (publickey)

GitHub nepřijal klíč. Zkontrolujte postupně:

Je klíč v agentovi? – vypíše načtené klíče

ssh-add -l

Klíč chybí? Přidejte ho znovu (krok 2.2).

Po restartu Mac/Linux je potřeba klíč do agenta přidat znovu.

Funguje alias?

ssh -T git@github-account1

Nefunguje? Ověřte blok v ~/.ssh/config (krok 2.4) a veřejný klíč v GitHub účtu (krok 2.3).

Používá projekt alias?

git remote -v

Je tam github.com nebo https://? Změňte adresu:

git remote set-url origin git@github-account1:<uzivatel>/<repozitar>.git

Windows: Git klíč z agenta nevidí? – např. opakovaně chce heslo ke klíči

Nastavte Git, aby používal SSH z Windows (stejné jako agent):

git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
Could not open a connection to your authentication agent

SSH agent neběží.

eval $(ssh-agent -s)
ssh-add ~/.ssh/github_account1
error: remote origin already exists

Napojení už existuje. Místo add použijte set-url:

git remote set-url origin git@github-account1:<uzivatel>/<repozitar>.git
error: src refspec main does not match any

Větev main zatím nemá žádný commit, nebo se jmenuje jinak (např. master). Nejdřív commitněte (krok 3.4), případně větev přejmenujte: git branch -M main.

! [rejected] main -> main (fetch first)

Na GitHubu jsou změny, které lokálně nemáte. Stáhněte je a push zopakujte:

git pull --rebase origin main
git push
Commity se nepřiřazují k mému GitHub profilu

E-mail v commitech neodpovídá žádnému e-mailu ve vašem účtu. Zkontrolujte git config user.email (krok 3.3).

Potřebujete s něčím poradit?

Zjistěte, zda a jak vám můžeme pomoci.

Rezervovat schůzku