Table of Contents

Práce s verzovacím softwarem GIT

Git je nástroj pro správu a verzování softwaru. Díky svým vlastnostem umožňuje a usnadňuje práci na jednom projektu pro více lidí. Git je nejefektivnější především pro textové soubory, kde umožňuje velmi snadno sledovat jejich změny.

Skupina souborů (jedna stromová struktura) se nazývá repozitář.

Celý systém funguje tak, že uživatel po nějaké změně v repozitáři vytvoří commit, čímž tyto změny „zapíše“ do stromové struktury repozitáře a následně je nahraje na server. Další uživatel si tyto změny (commity) stáhne a může s nimi pracovat.

Například moduly stavebnice MLAB jsou uloženy také v jednom repositáři hostovaném na GitHubu.

Github

GitHub je portál, kde je možné si po přihlášení vytvořit vlastní Git repozitář. Základní veřejný repozitář je zdarma. Je to zároveň velmi rozšířená platforma.

Používání GITu

Pokud máme založený repozitář¸můžeme si vytvořit jeho lokální kopii. To se provede pomocí příkazu

git clone <url k repozitáři>

V příkladu se vyskyuje cesta k repozitáři. To lze zjistit přímo z webu z githubu kdy na webu repoziáře je zelené tlačíko clone.

Po provedení všech změn v našich souborech je potřeba tyto soubory přidat do gitu příkazem

git add .

Následně je potřeba vytvořit bod, kdy se soubor bude verzovat. To se provede pomocí příkazu:

git commit -m "Zaprava"

U commitu lze psát nějaké popisky o tom, jaké změny jsme udělali.

Po vytvoření commitu stačí změny nahrát na server pomocí

git push

Linux

Jako nejefektivnější uživatelské rozhraní pro git se osvědčil příkazový řádek s tím, že jeho efektivita je zde ještě markantnější než u SVN.

Nový uživatel

Pro pohodlnou ptáci s git je efektivnější používat metodu klonování s SSH. Není při práci vyžadováno stále přihlašování. Komunikace je autentizována na základě privátního klíče. Pro každý počítač je potřeba vygenerovat unikátní klíč.

  1. Je potřeba si založit uživatelský účet na https://github.com/
  2. Vygenerovaný klíč je potřeba vložit do účtu na githubu
  3. Pokud v návodu nefunguje správně uložení klíče do schránky, tak je možné daný klíč získat otevřením skrytého souboru a provést překopírování klíče ručně. cat ~/.ssh/id_rsa.pub
  4. Tento postup stačí provést jen při prvním stahování na daném počítači.
Základní příkazy
Klonování repozitáře :
  1. Nejprve je potřeba vybrat místo, kde má být repozitář v počítači uložen a v daném místě si otevřít příkazový řádek.
  2. Příklad bude ukázán na repozitáři kicad-mlab: https://github.com/MLAB-project/kicad-mlab
  3. Na dané stránce si stáhneme potřebnou cestu k repozitáři. Webové tlačítko „Clone or download“.
  4. Je potřeba si přepnout cestu pro „Clone with SSH“, na místo „Clone with HTTPS“.
  5. Pro náš případ cesta vypadá takto: git@github.com:MLAB-project/kicad-mlab.git
  6. Nyní stačí v příkazové řádce zadat příkaz:
git clone git@github.com:MLAB-project/kicad-mlab.git
  1. Následně můžeme být vyzváni k zadání hesla, které jsme si zvolili při generování SSH klíče.
Stažení aktuální verze:
  1. V místě uložení repozitáře je potřeba zadat v příkazové řádce následující příkaz:
git pull
Zjištění stavu aktuálnosti repozitáře
git status

Tento příkaz vypíše u jakých souborů došlo ke změně, nebo které byli přidány jako nové.

Přidání nového souboru, složky
git add název_souboru 

Po označení celé cesty z výpisu příkazů lze cestu vložit pomocí kliknutí na prostřední tlačítko myši. Pro přidání všech změn lze použít ```git add .```.

Vytvoření commitu
git commit -m "Popis provedené změny"

Po tomto příkazu je commit pouze v lokální kopii repozitáře. Aby se data odeslala na server je potřeba zadat následující příkaz.

Upload na server
git push 

Pro ověření, zda veškeré úkony proběhly v pořádku je dobré se podívat na výstup příkazu:

git status

Ve výpisu by neměly být žádné položky, které jsme chtěli nahrát.

Změna velikosti lokálního repozitáře

Git si ve výchozím nastavení stahuje celý repozitář včetně veškeré historie úprav. Toto lze zamezit při stahování repozitáře pomocí parametru ```–depth=<pocet stazenych commitu>```

git clone <adresa_repozitare> --depth=1

Pokuď toto chcete aplikovat na existující kopii repozitáře, lze to provést následujícím postupem.

git fetch --depth 2
git reflog expire --expire=all --all
git gc --prune=all
Přejmenování větve repozitáře

Protože u repozitářů hardware není vhodné využívat větev master, neboť mezi větvemi vyrobeného hardware nemá velký smysl větve slučovat do aktuální. Tak každý hardwarový repozitář obsahuje větve pojmenovávající varianty již vyrobeného hardware.

Protože git implicitně předpokládá název hlavní větve jako master, tak je nutné provést přejmenování.

Nejdříve lokálně přejmenujeme větev v naklonovaném repozitáři

git branch -m master new_branch         # Rename branch locally    

Změnu názvu je potřeba nahrát do repozitáře na serveru

git push --set-upstream origin new_branch   
# Push the new branch, set local branch to track the new remote

Následně je potřeba ve webovém rozhraní githubu pro nastevení repozitáře změnit jméno default větve. (Na githubu volba Branches → Default branch). Pak je možné větev master smazat.

git push origin :master                 # Delete the old branch    
Odděleni složky z repozitáře do samostatného repozitáře

Některé repozitáře postupem času vyrostou v obrovské molochy, které na disku zabírají hodně prostoru. Toto je příklad repozitáře Modules. Přitom častým požadavkem lidí je snadno navázat na konstrukci jednoho jedinného modulu. Což znamená si ho na githubu forknout. Plánovaným řešením tohoto problému je oddělení jednotlivých modulů do samostatné organizace. Pro oddělení složky modulu do samostatného repozitáře využijeme postup z dokumentace githubu.

Nejdříve je potřeba si naklonovat čistý repozitář.

git clone git@github.com:MLAB-project/Modules.git

V něm je potřeba vyfiltrovat složku, která obsahuje oddělovaný modul

git filter-branch --prune-empty --subdirectory-filter cesta_k/modulu  master

Takto upravenému repozitáři ještě vytvoříme větev pojmenovanou podle konkrétní verze modulu.

git branch -m master Názevmodulu_včetně_verze

Následně je potřeba na githubu vytvořit nový repozitář a cestu na remote nahradit jeho adresou. např.

git remote set-url origin git@github.com:mlab-modules/ISM02.git

Pak stačí do repozitáře nahrát připravený obsah odděleného modulu

git push -u origin BRANCH-NAME

Windows

TortoiseGit Pod operačním systémem Windows je možné stahovat pohodlně data z GitHub do počítače přes program TortoiseGit.