Git – spolupráce na open-source
Pokud se chce někdo v dnešní době věnovat studiu a pak i vývoji moderních technologií, neobejde se bez základních znalostí elektroniky a zároveň i programování. No a při studiu robotiky se základy strojírenství rozšířily o mechatroniku a například i o 3D modelování a 3D tisk.
V pokročilé době internetu se dá mnoho informací sdílet a tak spolupráce na projektech má v posledních desetiletích úplně jiné možnosti, než po celé předchozí období lidské civilizace. Prakticky to umožňuje spolupráci vývojářů napříč kontinenty a je to důvodem, proč mohou programátoři pracovat odkud chtějí (tzv. „full remote“).
Každý, kdo se někdy pokusil napsat nějaký program, ví, že programování je „nekonečný“ proces postupného ladění (odstraňování chyb), zlepšování (doplnění vlastností, zrychlení, zvýšení stability) a aktualizace (podle nových možností nebo změny zadání).
Postupným doplňováním a úpravami kódu vznikají další verze programu (na obrázku vpravo černé uzly) nebo větvení (oranžově). A tak v jednu chvíli můžeme mít více rozpracovaných variant programu, například 8A1, 8A2, 8B (podle priorit, drobných modifikací zadání, nebo rozdílného řešení problému).
Pokud si neuchováváme všechny zálohy starších variant (což je neustálé vytváření nových a nových kopií pracovního adresáře) nebo si nevedeme podrobnou dokumentaci, může se stát, že omylem nebo nedbalostí přijdeme o funkční verzi. Stačí když si jí přepíšeme novou s neúmyslnými chybami odhalenými později. Protože programátorské „pravidlo“ zní: v každém větším programu je alespoň jedna chyba a opravením jedné chyby často mohou vzniknout dvě další. Když budeme muset vytvořit několik variant programu nebo na projektu pracuje více programátorů či dokonce větších týmů, byl by vývoj nejenom velmi obtížný a nepřehledný, ale takřka nemožný.
Proto vznikl Git – jako systém pro správu verzí. Některé z jeho vlastnosti jsou:
► Distribuovaný vývoj – Git poskytuje každému vývojáři lokální kopii celé historie vývoje (local, clone).
► Mocná podpora pro nelineární vývoj – Git podporuje rychlé vytváření větví a rychlé slučování (fork, merge, squash).
► Git je velmi rychlý a škálovatelný, což umožňuje efektivní práci s velkými projekty (při používání textových souborů, jelikož základem je sofistikovaná práce s dílčími změnami v textu).
Repozitář
Pracovní adresář projektu obsahuje speciální podadresář .git, který v sobě ukrývá jednotlivé verze všech souborů. Přepínání mezi verzemi se provádí pomocí příkazů v Gitu.
(Náš projekt z úvodního obrázku se najednou značně zjednodušil.)
Repozitář (repository) je datové úložiště verzovacího systému, ze kterého je možné jednoduše vytvářet další úložiště, jinými slovy jeho obsah klonovat. Obecně lze repozitář chápat jako vysoce specializovaný souborový systém, jehož neodmyslitelnou funkcí je poskytování detailních informací o jednotlivých změnách, a to neomezeně hluboko do minulosti. Repozitáře podporují stromovou strukturu zařazení souborů a vnější reprezentací dat se velice blíží skutečným souborovým systémům.
Wikipedie https://cs.wikipedia.org/wiki/Git
GitHub, Bitbucket, GitLab
Git je možné provozovat nezávisle (na vlastním počítači), ale populárnější je použít některou z webových služeb, která zpřístupní váš zdrojový kód ostatním vývojářům. Bezplatný hosting pro open source projekty nabízí mimo jiné GitHub (nejznámější), Bitbucket nebo GitLab. Poslední jmenovaný má výhodu, že je sám o sobě open-source s možností hostingu na vlastním serveru.
Práce s Gitem (Git workflow)
Běžnou praxí pro práci na projektu je, že existuje centrální úložiště zdrojového kódu (např. na GitHubu). Na obrázku jako Main project (hlavní projekt – třeba náš „Proj_abc“), který má svou hlavní stabilní vývojovou větev (upstream). Každý vývojář má u sebe vlastní klon (tzv. „local“).
■ Užití cizího kódu:
První setkání s GitHubem tradičně bývá použití části kódu někoho jiného. Pokud nám nestačí copy&paste z webu a chceme si například projekt spustit „u sebe“, tak k tomu ani nepotřebujeme vlastní účet.
Postačí v terminálu (z příkazové řádky) provést příkaz git clone https://github.com/project_abc v adresáři na našem počítači. GitHub se používá jako studnice open-source programů nebo dílčích knihoven. Někdy je to i skvělá inspirace (nebo „kontrola“), jak co funguje.
(obrázek: bereme si zdrojový kód z levé části Main project)
■ Vytvoření a sdílení vlastního projektu:
Typicky si ve svém účtu na GitHubu založíme nový projekt (centrální repozitář), u sebe na počítači pak vytvoříme lokální klon. Každý náš commit a push pak budou vidět na našem GitHubu.
Často se vytvářejí vedle defaultní master branche také nové větve (např. develop, test a podobně) pro každodenní práci a ladění, do masteru se pak „mergují“ pouze otestované a funkční části projektu.
(obrázek : jsme autory zdrojového kódu v levé části Main project)
Nebojte se na svůj GitHub dávat i rozpracované projekty, nikdy nevíte, koho tím můžete inspirovat. Nezapomeňte připojit soubor README.md, kam napište i v jakém je váš projekt stavu.
■ Spolupráce na cizím projektu:
Na svém GitHubu vytvoříme fork vybraného projektu. „Vyklonujeme si“ lokální verzi a vytvoříme novou branche pro naše změny. Po vytvoření a odladění úprav, provedeme příkaz commit a push do našeho forku na GitHubu a otevřeme pull request (požadavek o začlenění) z naší nové branche do master původního projektu. Správce původního projektu pak uvidí náš příspěvek a může jej schválit, komentovat, atd.
(obrázek: přispíváme svým kódem z pravé části autorům do levé části)
Programátoři používají Git v řádkovém editoru, ale na GitHubu je možné většinu provádět interaktivně „klikáním myši do okýnek“.
Pár vybraných příkazů gitu:
git init (v aktuálním adresáři DIR založí repozitář)
git clone URL (naklonování vzdáleného repozitáře z dané adresy)
git add FILE (přidání souboru FILE, DIR -> STAGE)
git status (vypíše stav repozitáře)
git commit (vytvoří novou REVIZI, STAGE -> REVIZE)
git diff (změny mezi STAGE a prac. adresářem DIR)
git log (vypíše změny všech revizí)
git branch (výpis všech větví)
git branch VĚTEV (založení nové větve s názvem VĚTEV)
git checkout VĚTEV (přepnutí na VĚTEV, např. „master“)
git merge VĚTEV (sloučení VĚTVE s tou aktuální)
git push <R> VĚTEV (poslání změn do vzd. repozitáře)
git pull <R> VĚTEV (nahrání změn ze vzd. repozitáře)
…
Podrobněji o Gitu například na: https://naucse.python.cz/course/pyladies/git/basics/
Veřejné zpřístupňování zdrojových kódů vytváří v podstatě otevřenou sociální síť vývojářů a programátorů. Nad projekty se vedou diskuse, vznikají „ToDo“ a roadmapy (plány a kroky, co se má udělat), zakládají se „issues“ (podněty, připomínky). Pokud se někdo chce pochlubit svojí prací nebo chce ukázat, jaký je programátor, stačí když zveřejní pod jakým jménem publikuje na GitHubu. Každý jeho commit (příspěvek) je tam zaznamenán v průběhu celé jeho historie. Stačí použít dodatečnou metodiku, jak si ověřit, že účet je opravdu jeho, stejně tak příspěvky publikované pod jeho přezdívkou – a rázem tu máme i nebývalý reputační systém. Na Githubu se sdružují celé týmy, vznikají nové startupy, lovci mozků se snaží přetáhnout programátory do velkých korporací.
Čerpali jsme z následujících zdrojů: Wikipedia, GitHub, naucse.python.cz