====== 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 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íč. - Je potřeba si založit uživatelský účet na https://github.com/ - Následně je potřeba [[https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/|vygenerovat na daném počítači SSH klíč]]. - Vygenerovaný klíč je potřeba [[https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/|vložit do účtu na githubu]] - 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'' - 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 : == - 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. - Příklad bude ukázán na repozitáři kicad-mlab: https://github.com/MLAB-project/kicad-mlab - Na dané stránce si stáhneme potřebnou cestu k repozitáři. Webové tlačítko "Clone or download". - Je potřeba si přepnout cestu pro "Clone with SSH", na místo "Clone with HTTPS". - Pro náš případ cesta vypadá takto: git@github.com:MLAB-project/kicad-mlab.git - Nyní stačí v příkazové řádce zadat příkaz: git clone git@github.com:MLAB-project/kicad-mlab.git - 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: == - 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=``` git clone --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 [[https://github.com/MLAB-project/Modules|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 [[https://github.com/mlab-modules|samostatné organizace]]. Pro oddělení složky modulu do samostatného repozitáře využijeme postup z [[https://help.github.com/en/github/using-git/splitting-a-subfolder-out-into-a-new-repository |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 === [[https://tortoisegit.org/download/|TortoiseGit]] Pod operačním systémem Windows je možné stahovat pohodlně data z GitHub do počítače přes program [[cs:tortoisegit|TortoiseGit]].