Spolupráce

„Opravdové” programy zřídka vznikají prací jednoho člověka. Víc hlav víc ví, a tak je dobré si na projekt vytvořit tým.

Každý člen týmu potřebuje mít přístup k práci ostatních. K tomu se dá použít Git: někde na internetu si zařídíme sdílený repozitář, se kterým se všichni budou synchronizovat.

Pro samostudium

Pokud materiály čteš z domu a máš možnost se v budoucnu dostat na nějaký sraz, zatím tuhle sekci přeskoč. Na sraze pak popros zkušenější programátory, aby ti pomohli. (Nechystáš-li se na sraz, můžeš pokračovat – zvládnout se to dá.)

Pro kouče

Udělej na GitHubu repozitář jménem prezencka a dej do něj soubor se svým jménem. Příklad je na encukou/prezencka. Nasdílej s účastnicemi příkaz na jeho naklonování (přes https).

Open Source

Nejde mluvit o Gitu a spolupráci a nezastavit se chvíli u otevřeného zdrojového kódu. První programy vznikaly v akademické sféře, kde byly zcela přirozeně sdíleny, jako je to s poznatky mezi vědci běžné. 50. a 60. léta byla obdobím velké kreativity, kdy vzniklo mnoho z konceptů a technologií, které dnes používáme. Pak se začalo programování postupně komercializovat a firmy začaly zdrojový kód skrývat jako konkurenční výhodu. Do té doby víceméně jednolitá komunita programátorů byla nucena se rozdělit.

Některým programátorům tohle skrývání kódu hluboce vadilo. Roku 1985 publikoval Richard Stallman GNU Manifesto, kde vysvětlil, proč hodlá vytvořit operační systém s otevřeným kódem a odstartoval tak hnutí svobodného softwaru. To prosazuje 4 následujících svobod (převzato z Wikipedie):

  1. svoboda používat program za jakýmkoliv účelem,
  2. svoboda studovat, jak program pracuje a možnost přizpůsobit ho svým potřebám,
  3. svoboda redistribuovat kopie programu,
  4. svoboda vylepšovat program a zveřejňovat zlepšení, aby z nich mohla mít prospěch celá komunita.

Dnes je spousta projektů s otevřeným zdrojovým kódem (tzv. open-source projektů) dostupná na Internetu a každý je používáme. Jejich další sdílení je upraveno jednou z licencí, které tyto základní svobody zaručují.

Ne všechny jsou v Pythonu (a těm co jsou zatím nebudeš všem rozumět). Ne všechny jsou v Gitu. Ne všechny jsou kvalitní – protože si každý může zveřejnit co chce, na Internetu se válí spousta nedodělků, opuštěných nápadů a nepodařených experimentů. A bohužel, ne všechny projekty mají přátelské autory.

Na druhou stranu ale open-source programy mají svoje výhody: nejenom že se z nich může kdokoli učit, ale každý může i zkontrolovat, jestli dělají to, co dělat mají. Populární open-source programy tě například pravděpodobně nebudou špehovat (tj. hlásit autorovi, co na počítači děláš), ani většinou neobsahují reklamy: kdyby to dělaly, najde se někdo kdo tyhle „funkce” odstraní a lidi – časem – začnou používat opravenou verzi.

Některé příklady populárních open-source projektů:

Jak vidno z posledního příkladu, nejen softwarové projekty se dají vést takhle veřejně. Tento kurz vychází z principů open source: všechno know-how je sdílené a budeme rádi, když se zapojíš.

Až příště uvidíš v materiálech chybu (nebo jestli o nějaké víž už teď), dnes se dozvíš, jak ji opravit!

A co tvůj kód? Chceš ho taky dávat takhle veřejně k dispozici? Nutné to samozřejmě není – Git se dá používat i v uzavřeném týmu – ale na druhou stranu, máš důvod proč to nedělat? Zveřejňovat zdrojový kód se hodí už jen pro to, aby ti s ním mohli zkušenější programátoři snadněji pomáhat.

GitHub

Na Internetu existuje spousta stránek, kam se dají nahrávat gitové repozitáře s kódem – např. GitLab, BitBucket, Pagure nebo Launchpad. Aktuálně nejpopulárnější je ale GitHub, který si tady ukážeme.

Jestli ještě nemáš uživatelský účet na github.com, jdi tam a založ si ho.

Naklonování repozitáře (git clone)

Pro začátek zkusíme práci s repozitářem, který už vytvořil někdo jiný. V příkazové řádce zadej příkaz, který ti oznámí kouč; něco jako

$ git clone https://github.com/frenzymadness/prezencka

Vytvoří se ti nový repozitář – adresář se jménem prezencka, ve kterém je nějaký soubor.

Na URL (adresu), kterou jsi v tomhle příkladě použil/a, se můžeš podívat i v prohlížeči. Uvidíš seznam souborů a spoustu odkazů k informacím o repozitáři (například pod „commits” je historie).

Přepni se do nového adresáře (cd prezencka) a zkus se podívat na historii (gitk nebo git log). Možná je krátká, ale hlavně, že nějaká je. Máš na počítači kopii projektu, který založil někdo jiný!

Posílání změn (git push)

Teď se do projektu zapoj. Přidej soubor se svým jménem (nebo přezdívkou) a dej ho do gitu (git add jmeno.txt, git commit).

Teď zbývá „jen” změnu začlenit do původního sdíleného repozitáře. To ale není jen tak: repozitář, který jsi naklonoval/a, patří koučovi. A tomu by se asi nelíbilo, kdyby kdokoliv na Internetu mohl přijít a nahrát mu do repozitáře změny.

Spousta míst na Internetu funguje tak, že vybraná skupina lidí má „přístup”: můžou dělat změny, jak se jim líbí.

S Gitem se používá jiný přístup: změny nahraješ do vlastního sdíleného repozitáře a majiteli původního projektu napíšeš žádost o začlenění těch změn (angl. pull request). Může to být třeba mail se slovy „Hele, na té a té adrese mám nějaké změny, které by se ti mohli hodit! Přidej je do svého projektu!”

Výhoda je v tom, že se do projektu – pokud je veřejný – může zapojit kdokoliv. Nemusíš se předem ptát, nemusíš dokazovat že jsi důvěryhodná osoba, stačí něco změnit a poslat. Jestli se změna bude autorům projektu líbit nebo ne, to už je jiná věc. Ale záleží hlavně na samotné změně, ne na tom, kdo ji udělal.

Služba github.com ti umožňuje si udělat vlastní sdílený repozitář a zjednodušuje začleňování změn (místo posílání mailů stačí zmáčknout tlačítko). Pojďme se podívat, jak na to.

Přihlaš se na GitHub a pak zajdi na adresu kterou jsi použil/a pro git clone. Vlevo nahoře najdi tlačítko „Fork” a klikni na něj. Tím si vytvoříš na GitHubu vlastní kopii repozitáře: adresa by měla být něco jako https://github.com/tvojejmeno/prezencka.

Kdybys měl/a v různých kopiích repozitáře zmatek, přijde vhod malé vysvětlení: jedna kopie je původní projekt na GitHubu, kam správce projektu dává aktuální „oficiální verzi“. Další kopie na GitHubu je „tvoje“ a můžeš si do ní nahrát co chceš (nejčastěji v ní ale zveřejňuješ změny, které můžou být užitečné pro ostatní). A třetí kopii repozitáře máš u sebe na počítači.

Diagram tří repozitářů

A teď, jak z tvého počítače nahrát změny na GitHub? Git si u každého repozitáře na tvém počítači pamatuje adresy, odkud se dají stahovat a kam se dají posílat změny. Seznam těchhle adres ti ukáže příkaz git remote -v. Třeba:

$ git remote -v
origin  https://github.com/frenzymadness/prezencka (fetch)
origin  https://github.com/frenzymadness/prezencka (push)

Tenhle výstup znamená, že pod zkratkou „origin” se schovává adresa, ze které jsi repozitář naklonoval/a.

Přidej si podobnou zkratku pro vlastní repozitář na GitHubu. Nezapomeň nahradit tvojejmeno za jméno účtu, který máš na GitHubu ty. (Pozor, v příkazu je tvojejmeno dvakrát!)

$ git remote add tvojejmeno https://github.com/tvojejmeno/prezencka

a zkontroluj si, že se to povedlo:

$ git remote -v
origin  git@github.com:frenzymadness/prezencka.git (fetch)
origin  git@github.com:frenzymadness/prezencka.git (push)
tvojejmeno      https://github.com/tvojejmeno/prezencka (fetch)
tvojejmeno      https://github.com/tvojejmeno/prezencka (push)

Tolik k nastavení – git remote add stačí udělat jednou pro každý repozitář. Pak už můžeš změny nahrávat pomocí:

$ git push tvojejmeno master

což znamená: pošli na adresu uloženou pod zkratkou tvojejmeno větev master.

Funguje? Podívej se na https://github.com/tvojejmeno/prezencka v prohlížeči a ujisti se, že tam tvoje změny jsou.

Žádost o začlenění (pull request)

Teď zbývá požádat autory původního projektu, aby změny z tvého sdíleného repozitáře přidali do svojí kopie. GitHub na to má mechanismus zvaný pull request (žádost o začlenění).

Jdi na stránku původního projektu (na adresu, kterou jsi použil/a na začátku pro git clone). Měl/a bys tam vidět oznámení o své nově nahrané větvi s velkým zeleným tlačítkem Compare & pull request. Klikni na něj. Pokud chceš, tak dopiš/změň popisek toho, co tahle změna obnáší. Pak zmáčkni další tlačítko.

Jestli tlačítko Compare & pull request nevidíš, běž na adresu své kopie repozitáře a stiskni tlačítko New pull request. Vyber, co kam chceš začlenit, dopiš/změň popisek a pak zmáčkni Create pull request.

Hotovo; teď je na autorech projektu, aby se na změny podívali a přijali – nebo začali diskusi o tom, jak je ještě vylepšit. (Diskutovat se dá na stránce pull requestu nebo přes mail.)

Pro samostudium

Procházíš-li materiály z domu, musíš teď počkat, než si někdo tvé žádosti všimne a začlení ji. To může trvat i pár dní; kdyby to bylo přes týden, tak se na stránce pull requestu zkus připomenout.

Aktualizace (git pull)

Když budou tvé změny – a změny od ostatních – začleněné, můžeš si aktualizovat lokální repozitář. (To je ten, který máš u sebe na počítači.)

To se dělá příkazem git pull origin master (stáhni změny z větve „master” z adresy pod zkratkou „origin”). Pomocí gitk --all nebo git log se můžeš podívat, jak se projekt mezitím vyvinul.

Gratuluji! Právě jsi prošel/prošla „kolečkem“, které většina programátorů dělá denně: udělání nějaké změny, odeslání kolegům na kontrolu a začlenění a stažení změn od ostatních.

Hlášení chyb (issues)

Občas nastane situace, kdy v nějakém projektu na GitHubu najdeš chybu, ale nemáš čas nebo znalosti, abys ji opravil/a. V takovém případě často na GitHubu na stránce projektu pod záložkou Issues najdeš seznam nahlášených problémů. Nenajdeš-li mezi nimi „svoji” chybu, můžeš ji nahlásit – stačí kliknout na New Issue a můžeš psát, kdy chyba nastává, co program dělá špatně a co by měl dělat místo toho.

Některé projekty nepoužívají Issues na GitHubu. Kdybys záložku Issues nenašel/nenašla, podívej se do dokumentace projektu, jestli tam není odkaz na seznam chyb.

README: Informace pro ostatní

Pokud vytváříš projekt a chceš, aby do něj přispívali i ostatní, je potřeba aby věděli, co tvůj projekt dělá, k čemu se hodí, jak se používá a podobně.

Na základní informace o projektu/repozitáři se používá soubor README (z angl. read me, čti mě). Do tohoto souboru patří mj.:

  • název projektu,
  • stručný popis projektu (jedna až dvě věty),
  • krátký návod k instalaci projektu,
  • krátký návod ke spuštění projektu,
  • krátký návod k používání projektu, případně odkaz na rozsáhlejší dokumentaci,
  • pokud má projekt testy, informace o tom, jak je spustit,
  • informace o tom, jak se zapojit do vývoje projektu,
  • informace o autorech projektu,
  • informace o licenci (více se licencích dozvíš později).

README by mělo být členěné a jeho přečtení by nemělo zabrat uživateli hodinu, většinou stačí krátké úderné informace s případným odkazem někam dál. Není tedy například potřeba vysvětlovat v každém projektu, jak se instaluje Python. Stačí říct, že Python je potřeba (a v jaká verze) a odkázat uživatele na patřičný návod. Je také třeba brát v úvahu, kdo bude README číst. Píšete-li program pro jiné vývojářky a vývojáře, často není třeba zabrušovat do velikých detailů.

GitHub (a spousty jiných podobných služeb) umožňuje pro README použít nějaký značkovací jazyk, například Markdown. Je možné pak používat nadpisy, obrázky apod.

V neposlední řadě – aby se do projektu mohl zapojit kdokoli z celého světa, bývají open-source projekty v angličtině. Jména proměnných, komentáře, dokumentace – všechno je primárně v anglické verzi. Tenhle kurz je česky, aby byly začátky jednodušší, ale jestli se ti programování zalíbilo a chceš v něm po kurzu pokračovat dál, bez angličtiny to bude velice složité.

Licence

Aby sdílení fungovalo i pro právní stránce, nestačí když nahraješ kus kódu na Internet. Musíš taky oficiálně oznámit, že si s ním ostatní můžou hrát. Bez licence totiž nemá nikdo právo tvůj program ani používat, natož vylepšovat.

Problematika licencí může být, bohužel, docela složitá. Když to ale zjednodušíme na minimum, budeš chtít jen zajistit, aby každý mohl tvůj výtvor používat, učit se z něj, předávat ho dál a vylepšovat ho. V tom případě vyber třeba licenci MIT.

Pokud chceš navíc zabránit tomu, že si tvůj kód někdo vezme a začne ho „vylepšovat“ a vydělávat na něm, aniž by se o vylepšení podělil s ostatními, zkus licenci AGPL.

A tyto materiály jsou pod ještě jinou licencí – CC BY-SA – protože výše jmenované licence jsou dělané na programy, ne na text.

Kód se nejčastěji licencuje tak, že text licence dáš do souboru jménem LICENSE a přidáš do Gitu.

Chceš-li si o licencích přečíst něco víc, odkážu tě na choosealicense.com, případně creativecommons.org a opensource.org.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/ostrava-git-workshop:git:3",
      "title": "Spolupráce a Open source",
      "html": "\n          \n    \n\n    <h1>Spolupr&#xE1;ce</h1>\n<p>&#x201E;Opravdov&#xE9;&#x201D; programy z&#x159;&#xED;dka vznikaj&#xED; prac&#xED; jednoho &#x10D;lov&#x11B;ka.\nV&#xED;c hlav v&#xED;c v&#xED;, a tak je dobr&#xE9; si na projekt vytvo&#x159;it t&#xFD;m.</p>\n<p>Ka&#x17E;d&#xFD; &#x10D;len t&#xFD;mu pot&#x159;ebuje m&#xED;t p&#x159;&#xED;stup k pr&#xE1;ci ostatn&#xED;ch.\nK tomu se d&#xE1; pou&#x17E;&#xED;t Git: n&#x11B;kde na internetu si za&#x159;&#xED;d&#xED;me <em>sd&#xED;len&#xFD; repozit&#xE1;&#x159;</em>,\nse kter&#xFD;m se v&#x161;ichni budou synchronizovat.</p>\n<div class=\"admonition note\"><p class=\"admonition-title\">Pro samostudium</p>\n<p>Pokud materi&#xE1;ly &#x10D;te&#x161; z domu a m&#xE1;&#x161; mo&#x17E;nost se\nv&#xA0;budoucnu dostat na n&#x11B;jak&#xFD; sraz, zat&#xED;m tuhle sekci p&#x159;esko&#x10D;.\nNa sraze pak popros zku&#x161;en&#x11B;j&#x161;&#xED; program&#xE1;tory, aby ti pomohli.\n(Nechyst&#xE1;&#x161;-li se na sraz, m&#x16F;&#x17E;e&#x161; pokra&#x10D;ovat &#x2013;\nzvl&#xE1;dnout se to d&#xE1;.)</p>\n</div><div class=\"admonition note\"><p class=\"admonition-title\">Pro kou&#x10D;e</p>\n<p>Ud&#x11B;lej na GitHubu repozit&#xE1;&#x159; jm&#xE9;nem <code>prezencka</code> a dej do\nn&#x11B;j soubor se sv&#xFD;m jm&#xE9;nem. P&#x159;&#xED;klad je na\n<a href=\"https://github.com/encukou/prezencka\">encukou/prezencka</a>.\nNasd&#xED;lej s &#xFA;&#x10D;astnicemi p&#x159;&#xED;kaz na jeho naklonov&#xE1;n&#xED; (p&#x159;es https).</p>\n</div><h2>Open Source</h2>\n<p>Nejde mluvit o Gitu a spolupr&#xE1;ci a nezastavit se chv&#xED;li u otev&#x159;en&#xE9;ho\nzdrojov&#xE9;ho k&#xF3;du.\nPrvn&#xED; programy vznikaly v&#xA0;akademick&#xE9; sf&#xE9;&#x159;e, kde byly zcela p&#x159;irozen&#x11B; sd&#xED;leny,\njako je to s&#xA0;poznatky mezi v&#x11B;dci b&#x11B;&#x17E;n&#xE9;.\n50. a 60. l&#xE9;ta byla obdob&#xED;m velk&#xE9; kreativity, kdy vzniklo mnoho z&#xA0;koncept&#x16F;\na technologi&#xED;, kter&#xE9; dnes pou&#x17E;&#xED;v&#xE1;me.\nPak se za&#x10D;alo programov&#xE1;n&#xED; postupn&#x11B; komercializovat a firmy za&#x10D;aly zdrojov&#xFD;\nk&#xF3;d skr&#xFD;vat jako konkuren&#x10D;n&#xED; v&#xFD;hodu.\nDo t&#xE9; doby v&#xED;cem&#xE9;n&#x11B; jednolit&#xE1; komunita program&#xE1;tor&#x16F; byla nucena se rozd&#x11B;lit.</p>\n<p>N&#x11B;kter&#xFD;m program&#xE1;tor&#x16F;m tohle skr&#xFD;v&#xE1;n&#xED; k&#xF3;du hluboce vadilo.\nRoku 1985 publikoval\n<a href=\"https://en.wikipedia.org/wiki/Richard_Stallman\">Richard Stallman</a>\n<a href=\"https://www.gnu.org/gnu/manifesto.en.html\">GNU Manifesto</a>,\nkde vysv&#x11B;tlil, pro&#x10D; hodl&#xE1; vytvo&#x159;it opera&#x10D;n&#xED; syst&#xE9;m s otev&#x159;en&#xFD;m k&#xF3;dem a\nodstartoval tak hnut&#xED; svobodn&#xE9;ho softwaru.\nTo prosazuje 4 n&#xE1;sleduj&#xED;c&#xED;ch svobod (p&#x159;evzato\nz&#xA0;<a href=\"https://cs.wikipedia.org/wiki/Svobodn%C3%BD_software\">Wikipedie</a>):</p>\n<ol start=\"0\">\n<li>svoboda pou&#x17E;&#xED;vat program za jak&#xFD;mkoliv &#xFA;&#x10D;elem,</li>\n<li>svoboda studovat, jak program pracuje a mo&#x17E;nost p&#x159;izp&#x16F;sobit ho sv&#xFD;m pot&#x159;eb&#xE1;m,</li>\n<li>svoboda redistribuovat kopie programu,</li>\n<li>svoboda vylep&#x161;ovat program a zve&#x159;ej&#x148;ovat zlep&#x161;en&#xED;, aby z&#xA0;nich mohla m&#xED;t prosp&#x11B;ch cel&#xE1; komunita.</li>\n</ol><p>Dnes je spousta projekt&#x16F; s otev&#x159;en&#xFD;m zdrojov&#xFD;m k&#xF3;dem (tzv.&#xA0;<em>open-source</em> projekt&#x16F;)\ndostupn&#xE1; na Internetu a ka&#x17E;d&#xFD; je pou&#x17E;&#xED;v&#xE1;me.\nJejich dal&#x161;&#xED; sd&#xED;len&#xED; je upraveno jednou z&#xA0;licenc&#xED;,\nkter&#xE9; tyto z&#xE1;kladn&#xED; svobody zaru&#x10D;uj&#xED;.</p>\n<p>Ne v&#x161;echny jsou v&#xA0;Pythonu (a t&#x11B;m co jsou zat&#xED;m\nnebude&#x161; v&#x161;em rozum&#x11B;t). Ne v&#x161;echny jsou v Gitu.\nNe v&#x161;echny jsou kvalitn&#xED; &#x2013; proto&#x17E;e si\nka&#x17E;d&#xFD; m&#x16F;&#x17E;e zve&#x159;ejnit co chce, na Internetu se v&#xE1;l&#xED;\nspousta nedod&#x11B;lk&#x16F;, opu&#x161;t&#x11B;n&#xFD;ch n&#xE1;pad&#x16F; a nepoda&#x159;en&#xFD;ch experiment&#x16F;.\nA bohu&#x17E;el, ne v&#x161;echny projekty maj&#xED; p&#x159;&#xE1;telsk&#xE9; autory.</p>\n<p>Na druhou stranu ale open-source programy\nmaj&#xED; svoje v&#xFD;hody: nejenom &#x17E;e se z nich m&#x16F;&#x17E;e kdokoli\nu&#x10D;it, ale ka&#x17E;d&#xFD; m&#x16F;&#x17E;e i zkontrolovat, jestli\nd&#x11B;laj&#xED; to, co d&#x11B;lat maj&#xED;.\nPopul&#xE1;rn&#xED; open-source programy t&#x11B; nap&#x159;&#xED;klad\npravd&#x11B;podobn&#x11B; nebudou &#x161;pehovat (tj. hl&#xE1;sit autorovi,\nco na po&#x10D;&#xED;ta&#x10D;i d&#x11B;l&#xE1;&#x161;), ani v&#x11B;t&#x161;inou neobsahuj&#xED;\nreklamy: kdyby to d&#x11B;laly, najde se\nn&#x11B;kdo kdo tyhle &#x201E;funkce&#x201D; odstran&#xED; a lidi &#x2013; &#x10D;asem &#x2013;\nza&#x10D;nou pou&#x17E;&#xED;vat opravenou verzi.</p>\n<p>N&#x11B;kter&#xE9; p&#x159;&#xED;klady popul&#xE1;rn&#xED;ch open-source projekt&#x16F;:</p>\n<ul>\n<li><a href=\"https://github.com/mozilla/gecko-dev\">Mozilla Firefox</a>,\n<a href=\"https://chromium.googlesource.com/chromium/src.git\">Chromium</a>\n(prohl&#xED;&#x17E;e&#x10D;e)</li>\n<li><a href=\"https://github.com/atom/atom\">Atom</a>,\n<a href=\"https://github.com/GNOME/gedit\">gedit</a>\n(textov&#xE9; editory)</li>\n<li><a href=\"https://github.com/python/cpython\">CPython</a>\n(jazyk Python)</li>\n<li><a href=\"https://github.com/torvalds/linux\">Linux</a>,\n<a href=\"https://github.com/aosp-mirror\">Android</a>\n(j&#xE1;dra opera&#x10D;n&#xED;ch syst&#xE9;m&#x16F;)</li>\n<li><a href=\"https://github.com/pytest-dev/pytest/\">Pytest</a>\n(pythonn&#xED; knihovna na testov&#xE1;n&#xED;)</li>\n<li><a href=\"https://github.com/django/django\">Django</a>,\n<a href=\"https://github.com/mitsuhiko/flask\">Flask</a>,\n<a href=\"https://github.com/kennethreitz/requests\">Requests</a>\n(webov&#xE9; knihovny pro Python)</li>\n<li><a href=\"https://github.com/numpy/numpy\">NumPy</a>,\n<a href=\"https://github.com/jupyter/notebook\">Jupyter</a>,\n<a href=\"https://github.com/matplotlib/matplotlib\">Matplotlib</a>\n(pythonn&#xED; knihovny pro v&#x11B;dce a analytiky)</li>\n<li><a href=\"https://github.com/pyvec/naucse.python.cz\">Materi&#xE1;ly</a> k&#xA0;tomuto kurzu</li>\n</ul>\n<p>Jak vidno z posledn&#xED;ho p&#x159;&#xED;kladu, nejen softwarov&#xE9;\nprojekty se daj&#xED; v&#xE9;st takhle ve&#x159;ejn&#x11B;.\nTento kurz vych&#xE1;z&#xED; z princip&#x16F; open source:\nv&#x161;echno know-how je sd&#xED;len&#xE9; a budeme r&#xE1;di, kdy&#x17E;\nse zapoj&#xED;&#x161;.</p>\n<p>A&#x17E; p&#x159;&#xED;&#x161;t&#x11B; uvid&#xED;&#x161; v materi&#xE1;lech chybu (nebo jestli o n&#x11B;jak&#xE9; v&#xED;&#x17E; u&#x17E; te&#x10F;),\ndnes se dozv&#xED;&#x161;, jak ji opravit!</p>\n<p>A co tv&#x16F;j k&#xF3;d? Chce&#x161; ho taky d&#xE1;vat takhle ve&#x159;ejn&#x11B; k dispozici?\nNutn&#xE9; to samoz&#x159;ejm&#x11B; nen&#xED; &#x2013; Git se d&#xE1; pou&#x17E;&#xED;vat i\nv uzav&#x159;en&#xE9;m t&#xFD;mu &#x2013; ale na druhou stranu,\nm&#xE1;&#x161; d&#x16F;vod pro&#x10D; to ned&#x11B;lat?\nZve&#x159;ej&#x148;ovat zdrojov&#xFD; k&#xF3;d se hod&#xED; u&#x17E; jen pro to,\naby ti s&#xA0;n&#xED;m mohli zku&#x161;en&#x11B;j&#x161;&#xED; program&#xE1;to&#x159;i snadn&#x11B;ji pom&#xE1;hat.</p>\n<h2>GitHub</h2>\n<p>Na Internetu existuje spousta str&#xE1;nek, kam se daj&#xED; nahr&#xE1;vat gitov&#xE9; repozit&#xE1;&#x159;e\ns&#xA0;k&#xF3;dem &#x2013; nap&#x159;. <a href=\"https://gitlab.com/\">GitLab</a>,\n<a href=\"https://bitbucket.org\">BitBucket</a>,\n<a href=\"https://pagure.io/\">Pagure</a> nebo\n<a href=\"https://launchpad.net/\">Launchpad</a>.\nAktu&#xE1;ln&#x11B; nejpopul&#xE1;rn&#x11B;j&#x161;&#xED; je ale <a href=\"https://github.com\">GitHub</a>, kter&#xFD; si tady\nuk&#xE1;&#x17E;eme.</p>\n<p>Jestli je&#x161;t&#x11B; nem&#xE1;&#x161; u&#x17E;ivatelsk&#xFD; &#xFA;&#x10D;et na <a href=\"https://github.com\">github.com</a>, jdi\ntam a zalo&#x17E; si ho.</p>\n<h2>Naklonov&#xE1;n&#xED; repozit&#xE1;&#x159;e <small>(<code>git clone</code>)</small></h2>\n<p>Pro za&#x10D;&#xE1;tek zkus&#xED;me pr&#xE1;ci s&#xA0;repozit&#xE1;&#x159;em, kter&#xFD; u&#x17E; vytvo&#x159;il n&#x11B;kdo jin&#xFD;.\nV p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dce zadej p&#x159;&#xED;kaz, kter&#xFD; ti ozn&#xE1;m&#xED; kou&#x10D;; n&#x11B;co jako</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>git clone https://github.com/frenzymadness/prezencka\n</pre></div><p>Vytvo&#x159;&#xED; se ti nov&#xFD; repozit&#xE1;&#x159; &#x2013; adres&#xE1;&#x159; se jm&#xE9;nem\n<code>prezencka</code>, ve kter&#xE9;m je n&#x11B;jak&#xFD; soubor.</p>\n<p>Na URL (adresu), kterou jsi v tomhle p&#x159;&#xED;klad&#x11B;\npou&#x17E;il/a, se m&#x16F;&#x17E;e&#x161; pod&#xED;vat i v prohl&#xED;&#x17E;e&#x10D;i.\nUvid&#xED;&#x161; seznam soubor&#x16F; a spoustu odkaz&#x16F; k\ninformac&#xED;m o repozit&#xE1;&#x159;i (nap&#x159;&#xED;klad pod &#x201E;commits&#x201D;\nje historie).</p>\n<p>P&#x159;epni se do nov&#xE9;ho adres&#xE1;&#x159;e (<code>cd prezencka</code>)\na zkus se pod&#xED;vat na historii (<code>gitk</code> nebo <code>git log</code>).\nMo&#x17E;n&#xE1; je kr&#xE1;tk&#xE1;, ale hlavn&#x11B;, &#x17E;e n&#x11B;jak&#xE1; je.\nM&#xE1;&#x161; na po&#x10D;&#xED;ta&#x10D;i kopii projektu, kter&#xFD; zalo&#x17E;il n&#x11B;kdo jin&#xFD;!</p>\n<h2>Pos&#xED;l&#xE1;n&#xED; zm&#x11B;n <small>(<code>git push</code>)</small></h2>\n<p>Te&#x10F; se do projektu zapoj.\nP&#x159;idej soubor se sv&#xFD;m jm&#xE9;nem (nebo p&#x159;ezd&#xED;vkou)\na dej ho do gitu (<code>git add jmeno.txt</code>, <code>git commit</code>).</p>\n<p>Te&#x10F; zb&#xFD;v&#xE1; &#x201E;jen&#x201D; zm&#x11B;nu za&#x10D;lenit do p&#x16F;vodn&#xED;ho sd&#xED;len&#xE9;ho repozit&#xE1;&#x159;e.\nTo ale nen&#xED; jen tak: repozit&#xE1;&#x159;, kter&#xFD; jsi\nnaklonoval/a, pat&#x159;&#xED; kou&#x10D;ovi. A tomu by se asi\nnel&#xED;bilo, kdyby kdokoliv na Internetu mohl p&#x159;ij&#xED;t\na nahr&#xE1;t mu do repozit&#xE1;&#x159;e zm&#x11B;ny.</p>\n<p>Spousta m&#xED;st na Internetu funguje tak, &#x17E;e vybran&#xE1;\nskupina lid&#xED; m&#xE1; &#x201E;p&#x159;&#xED;stup&#x201D;: m&#x16F;&#x17E;ou d&#x11B;lat zm&#x11B;ny,\njak se jim l&#xED;b&#xED;.</p>\n<p>S Gitem se pou&#x17E;&#xED;v&#xE1; jin&#xFD; p&#x159;&#xED;stup:\nzm&#x11B;ny nahraje&#x161; do <em>vlastn&#xED;ho</em> sd&#xED;len&#xE9;ho\nrepozit&#xE1;&#x159;e a majiteli p&#x16F;vodn&#xED;ho projektu nap&#xED;&#x161;e&#x161;\n&#x17E;&#xE1;dost o za&#x10D;len&#x11B;n&#xED; t&#x11B;ch zm&#x11B;n (angl. <em>pull request</em>).\nM&#x16F;&#x17E;e to b&#xFD;t t&#x159;eba mail se slovy &#x201E;Hele, na t&#xE9; a t&#xE9;\nadrese m&#xE1;m n&#x11B;jak&#xE9; zm&#x11B;ny, kter&#xE9; by se ti mohli hodit!\nP&#x159;idej je do sv&#xE9;ho projektu!&#x201D;</p>\n<p>V&#xFD;hoda je v tom, &#x17E;e se do projektu &#x2013; pokud je\nve&#x159;ejn&#xFD; &#x2013; m&#x16F;&#x17E;e zapojit kdokoliv. Nemus&#xED;&#x161; se\np&#x159;edem pt&#xE1;t, nemus&#xED;&#x161; dokazovat &#x17E;e jsi d&#x16F;v&#x11B;ryhodn&#xE1;\nosoba, sta&#x10D;&#xED; n&#x11B;co zm&#x11B;nit a poslat.\nJestli se zm&#x11B;na bude autor&#x16F;m projektu l&#xED;bit nebo\nne, to u&#x17E; je jin&#xE1; v&#x11B;c. Ale z&#xE1;le&#x17E;&#xED; hlavn&#x11B; na samotn&#xE9;\nzm&#x11B;n&#x11B;, ne na tom, kdo ji ud&#x11B;lal.</p>\n<p>Slu&#x17E;ba <a href=\"https://github.com/\">github.com</a>\nti umo&#x17E;&#x148;uje si ud&#x11B;lat vlastn&#xED; sd&#xED;len&#xFD; repozit&#xE1;&#x159; a zjednodu&#x161;uje\nza&#x10D;le&#x148;ov&#xE1;n&#xED; zm&#x11B;n (m&#xED;sto pos&#xED;l&#xE1;n&#xED; mail&#x16F; sta&#x10D;&#xED;\nzm&#xE1;&#x10D;knout tla&#x10D;&#xED;tko). Poj&#x10F;me se pod&#xED;vat, jak na to.</p>\n<p>P&#x159;ihla&#x161; se na GitHub a pak zajdi na adresu\nkterou jsi pou&#x17E;il/a pro <code>git clone</code>.\nVlevo naho&#x159;e najdi tla&#x10D;&#xED;tko &#x201E;Fork&#x201D; a klikni na n&#x11B;j.\nT&#xED;m si vytvo&#x159;&#xED;&#x161; na GitHubu vlastn&#xED; kopii repozit&#xE1;&#x159;e:\nadresa by m&#x11B;la b&#xFD;t n&#x11B;co jako\n<code>https://github.com/<i>tvojejmeno</i>/prezencka</code>.</p>\n<div class=\"admonition note\"><p>Kdybys m&#x11B;l/a v r&#x16F;zn&#xFD;ch kopi&#xED;ch repozit&#xE1;&#x159;e zmatek,\np&#x159;ijde vhod mal&#xE9; vysv&#x11B;tlen&#xED;: jedna kopie je p&#x16F;vodn&#xED;\nprojekt na GitHubu, kam spr&#xE1;vce projektu d&#xE1;v&#xE1;\naktu&#xE1;ln&#xED; &#x201E;ofici&#xE1;ln&#xED; verzi&#x201C;. Dal&#x161;&#xED; kopie na GitHubu\nje &#x201E;tvoje&#x201C; a m&#x16F;&#x17E;e&#x161; si do n&#xED; nahr&#xE1;t co chce&#x161;\n(nej&#x10D;ast&#x11B;ji v n&#xED; ale zve&#x159;ej&#x148;uje&#x161; zm&#x11B;ny, kter&#xE9; m&#x16F;&#x17E;ou\nb&#xFD;t u&#x17E;ite&#x10D;n&#xE9; pro ostatn&#xED;). A t&#x159;et&#xED; kopii repozit&#xE1;&#x159;e\nm&#xE1;&#x161; u sebe na po&#x10D;&#xED;ta&#x10D;i.</p>\n</div><blockquote><p><span class=\"figure\"><a href=\"/2019/ostrava-git-workshop/git/collaboration/static/gh-workflow-diagram.svg\"><img src=\"/2019/ostrava-git-workshop/git/collaboration/static/gh-workflow-diagram.svg\" alt=\"Diagram t&#x159;&#xED; repozit&#xE1;&#x159;&#x16F;\"></a></span></p>\n</blockquote>\n<p>A te&#x10F;, jak z tv&#xE9;ho po&#x10D;&#xED;ta&#x10D;e nahr&#xE1;t zm&#x11B;ny na GitHub?\nGit si u ka&#x17E;d&#xE9;ho repozit&#xE1;&#x159;e na tv&#xE9;m po&#x10D;&#xED;ta&#x10D;i\npamatuje adresy, odkud se daj&#xED; stahovat\na kam se daj&#xED; pos&#xED;lat zm&#x11B;ny.\nSeznam t&#x11B;chhle adres ti uk&#xE1;&#x17E;e p&#x159;&#xED;kaz <code>git remote -v</code>.\nT&#x159;eba:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>git remote -v\n<span class=\"go\">origin  https://github.com/frenzymadness/prezencka (fetch)</span>\n<span class=\"go\">origin  https://github.com/frenzymadness/prezencka (push)</span>\n</pre></div><p>Tenhle v&#xFD;stup znamen&#xE1;, &#x17E;e pod zkratkou &#x201E;origin&#x201D;\nse schov&#xE1;v&#xE1; adresa, ze kter&#xE9; jsi repozit&#xE1;&#x159;\nnaklonoval/a.</p>\n<p>P&#x159;idej si podobnou zkratku pro vlastn&#xED; repozit&#xE1;&#x159; na GitHubu.\nNezapome&#x148; nahradit <i>tvojejmeno</i> za jm&#xE9;no &#xFA;&#x10D;tu,\nkter&#xFD; m&#xE1;&#x161; na GitHubu ty. (Pozor, v&#xA0;p&#x159;&#xED;kazu je <i>tvojejmeno</i> dvakr&#xE1;t!)</p>\n<div class=\"highlight codehilite\">\n<pre><code><span class=\"gp\">$</span> git remote add <i>tvojejmeno</i> https://github.com/<i>tvojejmeno</i>/prezencka\n</code></pre></div><p>a zkontroluj si, &#x17E;e se to povedlo:</p>\n<div class=\"highlight codehilite\">\n<pre><code><span class=\"gp\">$</span> git remote -v\n<span class=\"go\">origin  git@github.com:frenzymadness/prezencka.git (fetch)</span>\n<span class=\"go\">origin  git@github.com:frenzymadness/prezencka.git (push)</span>\n<span class=\"go\"><i>tvojejmeno</i>      https://github.com/<i>tvojejmeno</i>/prezencka (fetch)</span>\n<span class=\"go\"><i>tvojejmeno</i>      https://github.com/<i>tvojejmeno</i>/prezencka (push)</span>\n</code></pre></div><p>Tolik k nastaven&#xED; &#x2013; <code>git remote add</code>\nsta&#x10D;&#xED; ud&#x11B;lat jednou pro ka&#x17E;d&#xFD; repozit&#xE1;&#x159;.\nPak u&#x17E; m&#x16F;&#x17E;e&#x161; zm&#x11B;ny nahr&#xE1;vat pomoc&#xED;:</p>\n<div class=\"highlight codehilite\">\n<pre><code><span class=\"gp\">$</span> git push <i>tvojejmeno</i> master\n</code></pre></div><p>co&#x17E; znamen&#xE1;: po&#x161;li na adresu ulo&#x17E;enou pod zkratkou\n<code><i>tvojejmeno</i></code>\nv&#x11B;tev <code>master</code>.</p>\n<p>Funguje? Pod&#xED;vej se na\n<code>https://github.com/<i>tvojejmeno</i>/prezencka</code>\nv&#xA0;prohl&#xED;&#x17E;e&#x10D;i a ujisti se, &#x17E;e tam tvoje zm&#x11B;ny jsou.</p>\n<h2>&#x17D;&#xE1;dost o za&#x10D;len&#x11B;n&#xED; <small>(<em>pull request</em>)</small></h2>\n<p>Te&#x10F; zb&#xFD;v&#xE1; po&#x17E;&#xE1;dat autory p&#x16F;vodn&#xED;ho projektu,\naby zm&#x11B;ny z tv&#xE9;ho sd&#xED;len&#xE9;ho repozit&#xE1;&#x159;e p&#x159;idali do svoj&#xED; kopie.\nGitHub na to m&#xE1; mechanismus zvan&#xFD; <em>pull request</em> (&#x17E;&#xE1;dost o za&#x10D;len&#x11B;n&#xED;).</p>\n<p>Jdi na str&#xE1;nku p&#x16F;vodn&#xED;ho projektu (na adresu,\nkterou jsi pou&#x17E;il/a na za&#x10D;&#xE1;tku pro\n<code>git clone</code>).\nM&#x11B;l/a bys tam vid&#x11B;t ozn&#xE1;men&#xED; o sv&#xE9; nov&#x11B; nahran&#xE9; v&#x11B;tvi\ns&#xA0;velk&#xFD;m zelen&#xFD;m tla&#x10D;&#xED;tkem <em>Compare &amp; pull request</em>.\nKlikni na n&#x11B;j. Pokud chce&#x161;, tak dopi&#x161;/zm&#x11B;&#x148; popisek\ntoho, co tahle zm&#x11B;na obn&#xE1;&#x161;&#xED;.\nPak zm&#xE1;&#x10D;kni dal&#x161;&#xED; tla&#x10D;&#xED;tko.</p>\n<div class=\"admonition note\"><p>Jestli tla&#x10D;&#xED;tko <em>Compare &amp; pull request</em> nevid&#xED;&#x161;, b&#x11B;&#x17E; na adresu\n<em>sv&#xE9;</em> kopie repozit&#xE1;&#x159;e a stiskni tla&#x10D;&#xED;tko <em>New pull request</em>.\nVyber, co kam chce&#x161; za&#x10D;lenit, dopi&#x161;/zm&#x11B;&#x148; popisek a pak zm&#xE1;&#x10D;kni\n<em>Create pull request</em>.</p>\n</div><p>Hotovo; te&#x10F; je na autorech projektu, aby\nse na zm&#x11B;ny pod&#xED;vali a p&#x159;ijali &#x2013; nebo za&#x10D;ali diskusi\no tom, jak je je&#x161;t&#x11B; vylep&#x161;it.\n(Diskutovat se d&#xE1; na str&#xE1;nce <em>pull requestu</em> nebo p&#x159;es mail.)</p>\n<div class=\"admonition note\"><p class=\"admonition-title\">Pro samostudium</p>\n<p>Proch&#xE1;z&#xED;&#x161;-li materi&#xE1;ly z domu, mus&#xED;&#x161; te&#x10F; po&#x10D;kat,\nne&#x17E; si n&#x11B;kdo tv&#xE9; &#x17E;&#xE1;dosti v&#x161;imne a za&#x10D;len&#xED; ji.\nTo m&#x16F;&#x17E;e trvat i p&#xE1;r dn&#xED;; kdyby to bylo p&#x159;es t&#xFD;den,\ntak se na str&#xE1;nce <em>pull requestu</em> zkus p&#x159;ipomenout.</p>\n</div><h2>Aktualizace <small>(<code>git pull</code>)</small></h2>\n<p>Kdy&#x17E; budou tv&#xE9; zm&#x11B;ny &#x2013; a zm&#x11B;ny od ostatn&#xED;ch &#x2013;\nza&#x10D;len&#x11B;n&#xE9;, m&#x16F;&#x17E;e&#x161; si aktualizovat lok&#xE1;ln&#xED; repozit&#xE1;&#x159;. (To je ten,\nkter&#xFD; m&#xE1;&#x161; u sebe na po&#x10D;&#xED;ta&#x10D;i.)</p>\n<p>To se d&#x11B;l&#xE1; p&#x159;&#xED;kazem\n<code>git pull origin master</code> (st&#xE1;hni zm&#x11B;ny\nz v&#x11B;tve &#x201E;master&#x201D; z&#xA0;adresy pod zkratkou &#x201E;origin&#x201D;).\nPomoc&#xED; <code>gitk --all</code> nebo <code>git log</code>\nse m&#x16F;&#x17E;e&#x161; pod&#xED;vat, jak se projekt mezit&#xED;m vyvinul.</p>\n<p>Gratuluji! Pr&#xE1;v&#x11B; jsi pro&#x161;el/pro&#x161;la &#x201E;kole&#x10D;kem&#x201C;,\nkter&#xE9; v&#x11B;t&#x161;ina program&#xE1;tor&#x16F; d&#x11B;l&#xE1; denn&#x11B;: ud&#x11B;l&#xE1;n&#xED; n&#x11B;jak&#xE9; zm&#x11B;ny,\nodesl&#xE1;n&#xED; koleg&#x16F;m na kontrolu a za&#x10D;len&#x11B;n&#xED; a sta&#x17E;en&#xED; zm&#x11B;n od ostatn&#xED;ch.</p>\n<h2>Hl&#xE1;&#x161;en&#xED; chyb <small>(<em>issues</em>)</small></h2>\n<p>Ob&#x10D;as nastane situace, kdy v n&#x11B;jak&#xE9;m projektu\nna GitHubu najde&#x161; chybu, ale nem&#xE1;&#x161; &#x10D;as nebo\nznalosti, abys ji opravil/a. V takov&#xE9;m p&#x159;&#xED;pad&#x11B;\n&#x10D;asto na GitHubu na str&#xE1;nce projektu pod z&#xE1;lo&#x17E;kou <em>Issues</em>\nnajde&#x161; seznam nahl&#xE1;&#x161;en&#xFD;ch probl&#xE9;m&#x16F;.\nNenajde&#x161;-li mezi nimi &#x201E;svoji&#x201D; chybu, m&#x16F;&#x17E;e&#x161; ji\nnahl&#xE1;sit &#x2013; sta&#x10D;&#xED; kliknout na <em>New Issue</em>\na m&#x16F;&#x17E;e&#x161; ps&#xE1;t, kdy chyba nast&#xE1;v&#xE1;, co program d&#x11B;l&#xE1;\n&#x161;patn&#x11B; a co by m&#x11B;l d&#x11B;lat m&#xED;sto toho.</p>\n<div class=\"admonition note\"><p>N&#x11B;kter&#xE9; projekty nepou&#x17E;&#xED;vaj&#xED; Issues na GitHubu.\nKdybys z&#xE1;lo&#x17E;ku Issues nena&#x161;el/nena&#x161;la, pod&#xED;vej se\ndo dokumentace projektu, jestli tam nen&#xED; odkaz na\nseznam chyb.</p>\n</div><h2>README: Informace pro ostatn&#xED;</h2>\n<p>Pokud vytv&#xE1;&#x159;&#xED;&#x161; projekt a chce&#x161;, aby do n&#x11B;j p&#x159;isp&#xED;vali i ostatn&#xED;,\nje pot&#x159;eba aby v&#x11B;d&#x11B;li, co tv&#x16F;j projekt d&#x11B;l&#xE1;, k &#x10D;emu se hod&#xED;,\njak se pou&#x17E;&#xED;v&#xE1; a podobn&#x11B;.</p>\n<p>Na z&#xE1;kladn&#xED; informace o projektu/repozit&#xE1;&#x159;i se pou&#x17E;&#xED;v&#xE1; soubor <code>README</code>\n(z angl. <em>read me</em>, <em>&#x10D;ti m&#x11B;</em>).\nDo tohoto souboru pat&#x159;&#xED; mj.:</p>\n<ul>\n<li>n&#xE1;zev projektu,</li>\n<li>stru&#x10D;n&#xFD; popis projektu (jedna a&#x17E; dv&#x11B; v&#x11B;ty),</li>\n<li>kr&#xE1;tk&#xFD; n&#xE1;vod k instalaci projektu,</li>\n<li>kr&#xE1;tk&#xFD; n&#xE1;vod ke spu&#x161;t&#x11B;n&#xED; projektu,</li>\n<li>kr&#xE1;tk&#xFD; n&#xE1;vod k pou&#x17E;&#xED;v&#xE1;n&#xED; projektu, p&#x159;&#xED;padn&#x11B; odkaz na rozs&#xE1;hlej&#x161;&#xED; dokumentaci,</li>\n<li>pokud m&#xE1; projekt testy, informace o tom, jak je spustit,</li>\n<li>informace o tom, jak se zapojit do v&#xFD;voje projektu,</li>\n<li>informace o autorech projektu,</li>\n<li>informace o licenci (v&#xED;ce se licenc&#xED;ch dozv&#xED;&#x161; pozd&#x11B;ji).</li>\n</ul>\n<p>README by m&#x11B;lo b&#xFD;t &#x10D;len&#x11B;n&#xE9; a jeho p&#x159;e&#x10D;ten&#xED; by nem&#x11B;lo zabrat u&#x17E;ivateli hodinu,\nv&#x11B;t&#x161;inou sta&#x10D;&#xED; kr&#xE1;tk&#xE9; &#xFA;dern&#xE9; informace s p&#x159;&#xED;padn&#xFD;m odkazem n&#x11B;kam d&#xE1;l.\nNen&#xED; tedy nap&#x159;&#xED;klad pot&#x159;eba vysv&#x11B;tlovat v ka&#x17E;d&#xE9;m projektu,\njak se instaluje Python.\nSta&#x10D;&#xED; &#x159;&#xED;ct, &#x17E;e Python je pot&#x159;eba (a v jak&#xE1; verze)\na odk&#xE1;zat u&#x17E;ivatele na pat&#x159;i&#x10D;n&#xFD; n&#xE1;vod.\nJe tak&#xE9; t&#x159;eba br&#xE1;t v &#xFA;vahu, kdo bude README &#x10D;&#xED;st.\nP&#xED;&#x161;ete-li program pro jin&#xE9; v&#xFD;voj&#xE1;&#x159;ky a v&#xFD;voj&#xE1;&#x159;e,\n&#x10D;asto nen&#xED; t&#x159;eba zabru&#x161;ovat do velik&#xFD;ch detail&#x16F;.</p>\n<p>GitHub (a spousty jin&#xFD;ch podobn&#xFD;ch slu&#x17E;eb) umo&#x17E;&#x148;uje pro README pou&#x17E;&#xED;t n&#x11B;jak&#xFD;\nzna&#x10D;kovac&#xED; jazyk, nap&#x159;&#xED;klad <a href=\"https://cs.wikipedia.org/wiki/Markdown\">Markdown</a>.\nJe mo&#x17E;n&#xE9; pak pou&#x17E;&#xED;vat nadpisy, obr&#xE1;zky apod.</p>\n<p>V neposledn&#xED; &#x159;ad&#x11B; &#x2013; aby se do projektu mohl zapojit\nkdokoli z&#xA0;cel&#xE9;ho sv&#x11B;ta, b&#xFD;vaj&#xED; open-source projekty v&#xA0;angli&#x10D;tin&#x11B;.\nJm&#xE9;na prom&#x11B;nn&#xFD;ch, koment&#xE1;&#x159;e, dokumentace &#x2013; v&#x161;echno\nje prim&#xE1;rn&#x11B; v anglick&#xE9; verzi.\nTenhle kurz je &#x10D;esky, aby byly za&#x10D;&#xE1;tky jednodu&#x161;&#x161;&#xED;,\nale jestli se ti programov&#xE1;n&#xED; zal&#xED;bilo a chce&#x161;\nv&#xA0;n&#x11B;m po kurzu pokra&#x10D;ovat d&#xE1;l, bez angli&#x10D;tiny\nto bude velice slo&#x17E;it&#xE9;.</p>\n<h2>Licence</h2>\n<p>Aby sd&#xED;len&#xED; fungovalo i pro pr&#xE1;vn&#xED; str&#xE1;nce,\nnesta&#x10D;&#xED; kdy&#x17E; nahraje&#x161; kus k&#xF3;du na Internet.\nMus&#xED;&#x161; taky ofici&#xE1;ln&#x11B; ozn&#xE1;mit, &#x17E;e si s n&#xED;m ostatn&#xED; m&#x16F;&#x17E;ou hr&#xE1;t.\nBez <em>licence</em> toti&#x17E; nem&#xE1; nikdo pr&#xE1;vo tv&#x16F;j\nprogram ani pou&#x17E;&#xED;vat, nato&#x17E; vylep&#x161;ovat.</p>\n<p>Problematika licenc&#xED; m&#x16F;&#x17E;e b&#xFD;t, bohu&#x17E;el, docela slo&#x17E;it&#xE1;.\nKdy&#x17E; to ale zjednodu&#x161;&#xED;me na minimum, bude&#x161;\ncht&#xED;t jen zajistit, aby ka&#x17E;d&#xFD; mohl tv&#x16F;j v&#xFD;tvor\npou&#x17E;&#xED;vat, u&#x10D;it se z&#xA0;n&#x11B;j, p&#x159;ed&#xE1;vat ho d&#xE1;l\na vylep&#x161;ovat ho. V tom p&#x159;&#xED;pad&#x11B; vyber t&#x159;eba\nlicenci <a href=\"https://choosealicense.com/licenses/mit/\">MIT</a>.</p>\n<div class=\"admonition note\"><p>Pokud chce&#x161; nav&#xED;c zabr&#xE1;nit tomu, &#x17E;e si tv&#x16F;j k&#xF3;d\nn&#x11B;kdo vezme a za&#x10D;ne ho &#x201E;vylep&#x161;ovat&#x201C; a vyd&#x11B;l&#xE1;vat na\nn&#x11B;m, ani&#x17E; by se o vylep&#x161;en&#xED; pod&#x11B;lil s&#xA0;ostatn&#xED;mi,\nzkus licenci <a href=\"https://choosealicense.com/licenses/agpl-3.0/\">AGPL</a>.</p>\n</div><div class=\"admonition note\"><p>A tyto materi&#xE1;ly jsou pod je&#x161;t&#x11B; jinou licenc&#xED; &#x2013;\n<a href=\"https://choosealicense.com/licenses/cc-by-sa-4.0/\">CC BY-SA</a> &#x2013;\nproto&#x17E;e v&#xFD;&#x161;e jmenovan&#xE9; licence jsou d&#x11B;lan&#xE9; na programy, ne na text.</p>\n</div><p>K&#xF3;d se nej&#x10D;ast&#x11B;ji licencuje tak, &#x17E;e text licence\nd&#xE1;&#x161; do souboru jm&#xE9;nem <code>LICENSE</code> a p&#x159;id&#xE1;&#x161; do Gitu.</p>\n<p>Chce&#x161;-li si o licenc&#xED;ch p&#x159;e&#x10D;&#xED;st n&#x11B;co v&#xED;c, odk&#xE1;&#x17E;u t&#x11B; na\n<a href=\"http://choosealicense.com/\">choosealicense.com</a>,\np&#x159;&#xED;padn&#x11B; <a href=\"http://creativecommons.org/choose/\">creativecommons.org</a>\na <a href=\"https://opensource.org/licenses\">opensource.org</a>.</p>\n\n\n        "
    }
  }
}