Git
Na tomto cvičení se naučíte pracovat s verzovacím nástrojem Git, který vám umožňuje ukládat historii změn v projektu a změny sdílet. Na cvičení budeme potřebovat nástroje git a gitk.
Instalace git a gitk
- Debian/Ubuntu:
apt install git gitk - macOS:
brew install git git-gui - Windows:
winget install Git.Git, případně stáhněte z oficiálních stránek.- Základní distribuce Gitu pro Windows již obsahuje
gitk.
- Základní distribuce Gitu pro Windows již obsahuje
Úvodní nastavení
Než začnete Git používat, je vhodné nastavit jméno a e-mail, pod kterým budete vytvářet změny:
git config --global user.email <username>@student.cvut.czgit config --global user.name "<jmeno> <prijmeni>"
Také nastavte výchozí název hlavní větve a automatické nastavování remotes (vysvětlíme později):
git config --global init.defaultBranch maingit config --global push.autoSetupRemote true
Nastavte si pro jistotu také defaultní editor dle preference (může se stát, že se Vám bude otevírat defaultně
vi/vim).
git config --global core.editor "nano"
Ukládání změn
Git ukládá historii pomocí tzv. commitů – záznamů o stavu souborů ve složce v momentě, kdy byl commit vytvořen. Commity vytváříte manuálně, typicky pokaždé když dokončíte práci na nějaké části projektu.
- Vytvořte v aktuální složce nový repozitář:
git init
- Ověřte, že zatím nemáte žádné neuložené změny:
git status
- Vytvořte nový Python script
main.py, který obsahuje hello world. Zkontrolujte stav repozitáře:git statusgit diff
- Vytvořte první commit obsahující soubor
main.py:git add main.pygit commit -m "Add hello world"git status
- Nyní vytvořte druhý modul
greet.py, ktery obsahuje funkcigreet, která bere jako parametr jméno, a vypíšeHello, {name}. Upravtemain.py, aby tuto funkci zavolal s libovolným argumentem. - Zkuste nyní
main.pyspustit, následně uložte změny v obou souborech do druhého commitu.- Povšimněte si, že v
git statusse vám ukazuje složka__pycache__, kterou ale nechcete do Gitu ukládat.
- Povšimněte si, že v
- Vytvořte soubor
.gitignore, kde složku pro Git "skryjete" (__pycache__/) a ten uložte do dalšího commitu. Ověřte, žegit statusjiž nehlásí žadné změny.
Zobrazení a vracení historie
- Zobrazte si historii commitů, nejdříve v terminálu a pak pomocí nástroje
gitk:git loggit show HEADgit show HEAD~gitk
- Zkuste upravit jméno předávané v
main.pya následně soubor obnovit do poslední uložené verze:git restore main.py
- Je možné se vrátit i ke starší verzi:
git restore -s HEAD~~ main.py- Změny ovlivňují pouze aktuální verzi souboru, nemění historii.
Sdílení projektu
Často chcete projekt zveřejnit, nebo na projektu pracovat z více počítačů. K tomu se vám bude hodit koncept Git "remotes" – vzdálených kopii Git repozitáře, kam můžete nahrávat změny z vašeho lokálního repozitáře a naopak stahovat změny nahrané odjinud.
Možností, kde kopie mít je více, důležité je jen to, abyste se k nim dokázali dostat odkudkoliv – např. složka na SSH serveru postel.felk.cvut.cz. Častější ale býva využití dedikované platformy pro práci s Git repozitáři – GitHub, GitLab, Codeberg a další. To si nyní vyzkoušíte.
- Vytvořte si nový repozitář na školním gitlabu na adrese https://gitlab.fel.cvut.cz.
- Nastavte si SSH klíč, pomocí kterého se budete k vzdálenému repozitáři připojovat.
Váš profil (vlevo nahoře)->Preferences->SSH Keys.- Pokud klíč nemáte z minulého cvičení, vygenerujte přes
ssh-keygen -t ed25519. - Veřejný klíč si můžete vypsat třeba pomocí
cat ~/.ssh/id_ed25519.pub(type %USERPROFILE%\.ssh\id_ed25519.pubv cmd na Windows), následně ho přidejte do GitLabu.
- Nyní si zkopírujte SSH adresu GitLab repozitáře (Code -> Clone with ssh-keygen) v už vytvořeném lokálním repozitáři nastavte nové přidaný GitLab repozitář jako remote:
git remote add origin <ssh-address>- Ověřte přes
git remote -v.
- Nahrajte historii vašeho lokálního repozitáře na GitLab:
git push
- "Naklonujte" si GitLab repozitář do nové složky mimo původní lokální repozitář:
git clone <ssh-address> <nazev-slozky>- Tento příkaz efektivně vytvoří novou složku, v té zavolá
git init, nastaví zadaný remote a pomocígit pull(viz níže) stáhne změny. - Nyní máte 3 nezávislé kopie repozitáře: původní lokální repozitář, online repozitář v GitLabu a druhou lokální kopii
- V novém repozitáři změňte některý ze souborů a změnu commitněte.
- Nahrajte nový commit do GitLab repozitáře:
git push
- V původním lokálním repozitáři změna ještě není viditelná, musíte jí explicitně stáhnout:
git pull
- Nyní zkuste v původním repozitáři udělat další změnu, tu commitněte, pushnete na GitLab a stáhněte v druhém lokálním repozitáři.