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 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.
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
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.
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íč.
cat ~/.ssh/id_rsa.pub
git clone git@github.com:MLAB-project/kicad-mlab.git
git pull
git status
Tento příkaz vypíše u jakých souborů došlo ke změně, nebo které byli přidány jako nové.
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 .```.
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.
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.
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
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
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
TortoiseGit Pod operačním systémem Windows je možné stahovat pohodlně data z GitHub do počítače přes program TortoiseGit.