diff --git a/README.md b/README.md index ecd6287..f519498 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Course Logo](https://scontent-frt3-1.xx.fbcdn.net/t31.0-8/p843x403/13925806_861297944014993_6462424771285799414_o.jpg)](Course Logo) +[![Course Logo](https://raw.githubusercontent.com/Nodonisko/git-workshop/master/logo.jpg)](Course Logo) # Naučte se konečně Git - Git Workshop v0.2 @@ -33,6 +33,11 @@ Následuje kurz automatizace vývoje. Díky +## Užitečné zdroje a odkazy +- [Git book - opensource kniha o gitu přeložená i do češtiny](https://git-scm.com/book/cs/v2) +- [Autocomplete GIT příkazů](https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion) +- [Zobrazení aktuální větve, počtu změněných souborů atd. přímo na řádce](https://github.com/magicmonty/bash-git-prompt) + Vojta Tranta
[Webdev/JS Evenings](https://www.facebook.com/groups/webdevjs/?fref=ts)
[Avocode](https://avocode.com/)
diff --git a/commit-branch.md b/commit-branch.md index 5ea7113..dc6495f 100644 --- a/commit-branch.md +++ b/commit-branch.md @@ -24,6 +24,26 @@ ## K čemu to je dobrý? Představte si, že na projektu pracuje tisíc lidí. Co když mají všichni najednou otevřený jeden soubor? Nebo jsou všichni na jednom síťovém uložišti...? +## Základní nastavení Gitu +Po nainstalovaní gitu je potřeba provést základní nastavení. Nejdůležitější je nastavit vaše uživatelské jméno a email. Tyto údaje se budou používat při každem +vytvoření nového commitu. + +``` +$ git config --global user.name "Daniel Suchy" +$ git config --global user.email suchydan@gmail.com +``` + +Pokud bychom chtěli nastavit jiné jméno nebo email pro konkretní projekt, spustíme tyto příkazy ve složce daného projektu, bez přepínače `--global` + +Pokud chceme předejít adrenalinovým zážitkům s VIMem, hodí se nastavit výchozí editor na něco více user friendly: +``` +git config --global core.editor nano +``` +Nebo stejný příkaz na Windows pro editor Notepad++: +``` +git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession" +``` + ## Co je to Commit [![Commits](http://nvie.com/img/merge-without-ff@2x.png)](Commits) @@ -101,7 +121,8 @@ Pokud znova spustíme `git status` měla by se zobrazit změny `new file: notes. Tato změna bude **unstaged**. Unstaged změny jsou takové, které nejsou připravené ke commitnutí. -Krom toho bude soubor `notes.md` v terminologii Gitu brán jako **untracked**. Untracked soubor je takový soubor, který ještě nikdy nebyl přidán do Gitu. Tudíž Git sice vidí, že tam takový soubor je, ale nesleduje zatím jeho změny. +Krom toho bude soubor `notes.md` v terminologii Gitu brán jako **untracked**. Untracked soubor je takový soubor, který ještě nikdy nebyl přidán do Gitu. +Tudíž Git sice vidí, že tam takový soubor je, ale nesleduje zatím jeho změny. V tomhle případě je změnou vytvoření nového souboru. Git dokáže jednoduše rušit unstaged změny přes příkaz `git checkout`, ale to nefunguje na přidání složek nebo souborů, ty se normálně mažou pomocí `rm`. ``` @@ -127,6 +148,8 @@ $ git config --global alias.s 'status' $ git config --get-regexp alias ``` +### Zpět ke commitu + Vytvoříme znovu soubor `notes.md` a pak přes `git s` uvidíme, že soubor byl znovu objeven Gitem! Unstaged změny nejdou commitnout: @@ -135,7 +158,8 @@ Unstaged změny nejdou commitnout: $ git commit -m "tohle je přidání souboru" // nic se nestane ``` -Prve je potřeba si změny, se kterýma počítáme do commitu, - to jsou ty hezké učesané, odložit do **stage** fáze před commit, prostě si je tam hezky připravujeme. Staged změny jsou ty, které budou commitnuty, jakmile napíšeme příkaz `git commit`. Přidání do stage se dělá pomocí příkazu: +Prve je potřeba si změny, se kterýma počítáme do commitu, - to jsou ty hezké učesané, odložit do **stage** fáze před commit, prostě si je tam hezky připravujeme. +Staged změny jsou ty, které budou commitnuty, jakmile napíšeme příkaz `git commit`. Přidání do stage se dělá pomocí příkazu: ``` // přidání do stage pro commit - příprava pro commit, uschování změn @@ -175,11 +199,12 @@ $ rm notes.md No tak to už umíme, tak si pojďme ten soubor commitnout příkazem: ``` +// převedeme všechny soubory do stavu staged tzn. stavu kdy jsou připraveny ke commitnutí $ git add --all $ git commit ``` -**GOTCHA:** defaultní editor pro úpravu commit messages a vůbec všeho textového v Gitu je VIM. +**GOTCHA:** Pokud jste si defaultní editor nezměnili pomocí git.config, je pro úpravu commit messages a vůbec všeho textového v Gitu VIM. A nikdo neví, jak do něj něco napsat nebo hůř, jak se z něj dostat, proto: Přepneme do zapisovacího módu: @@ -207,7 +232,7 @@ Pokud chceme předejít adrenalinovým zážitkům s VIMem, hodí se nastavit v git config --global core.editor nano ``` -Jasně, nikoho nebaví se furt přepínat do VIMu. Proto existuje zkratka, kterou používám: +Jasně, nikoho nebaví se furt přepínat do VIMu. Proto existuje zkratka, díky které nemusí lézt do žádného editoru: ``` $ git commit -m "commit messsage" ``` @@ -245,7 +270,7 @@ $ git log // hezčí zobrazí seznamu $ git log --pretty=oneline -n 50 --graph --abbrev-commit // uděláme na něj alias -$ git config --globa alias.l 'log --pretty=oneline --graph --abbrev-commit --branches --decorate -n 100' +$ git config --global alias.l 'log --pretty=oneline --graph --abbrev-commit --branches --decorate -n 100' //vyzkoušíme $ git l @@ -260,7 +285,7 @@ Nejjednoduší "smazání" je přes příkaz **reset**: // smazání posledního commitu (nejaktuálnějšího) $ git reset --hard HEAD~1 // odeber jeden nejnovější commit (na dané větvi) // případně -// $ git rest --hard HEAD~2 // odeber dva nejnovější commity (na dané větvi) +// $ git reset --hard HEAD~2 // odeber dva nejnovější commity (na dané větvi) ``` **HEAD**? Řikáte si, co je to HEAD? Head je označení pro poslední commit větve nebo prostě commit, na kterém jste nastaveni. Proto mám poznamenáno: @@ -270,7 +295,7 @@ Nyní se podíváme na stav commitů, jak jdou za sebou `git l`. Vidíme, že n **GOTCHA:** Smazat něco v Gitu je těžká práce, fakt hodně těžká. Smazat commit je z toho asi nejtěžší. Git po nějaké době maže sám ty commity, které nejsou u žádné branche (vysvětlíme). Chová se jako garbage collector a prostě maže to, k čemu není přístup. -Takže Vojto, ten commit je smazaný? Ne, není. Jenom jsme ho odebrali z větve, snadno ho dáme zpátky. Je spousta cest, jak to udělat. +Takže je ten commit opravdu smazaný? Ne, není. Jenom jsme ho odebrali z větve, snadno ho dáme zpátky. Je spousta cest, jak to udělat. #### Cherry-pick V našem případě si můžeme krásně zkusit příkaz **cherry-pick** (cherry-pick prostě vezme odněkud commit a přidá vám ho pod ruku (na vrchol branch a posune tak ukazatel HEAD), jak kdybyste ho právě udělali ručně): @@ -288,12 +313,16 @@ Takže umíme: - přidat změnu do stage pro commit - smazat změnu ze stage pro commmit - vytvořit commit -- jít do insert modu ve VIMu -- odejít z VIMu - smazat poslední commity z branche - cherry-picknout commit zpátky Procvičit! Celé znovu!! +``` +$ cd .. +$ rm -rf git-workshop +// znova! +``` + **Úkoly**: Vše kontrolovat přes `git s` nebo `git l`!!! - vytvořit soubor `cvicime.md` - přidat soubor do stage pro commit @@ -310,11 +339,6 @@ Procvičit! Celé znovu!! - smazat oba dva commity najednou - dostat přes Git je zpátky -``` -$ cd .. -$ rm -rf git-workshop -// znova! -``` ### Pokročilé operace @@ -332,7 +356,9 @@ Teď si každej řekne "Do piči, ten soubor `ten-se-ma-jmenovat-jinak.js` se m Jak to smáznout z commitu? Mno. -Jak jsem pravil, commit je neměnitelný - (immutable), tudíž commit jako takový nejde změnit, jde pouze nahradit jiným - snad nekecám. To je nám ale celkem šumák, protože výsledek je stejný. Kolikrát to ani člověk nepozná, neboť se u commitu třeba jenom změnit `commit id`. +Jak jsem pravil, commit je neměnitelný - (immutable), tudíž commit jako takový nejde změnit, jde pouze nahradit jiným - snad nekecám. +To je nám ale celkem šumák, protože výsledek je stejný. +Kolikrát to ani člověk nepozná, neboť se u commitu třeba jenom změnit `commit id`. Takže **amend**: ``` @@ -514,6 +540,20 @@ Jde o to, že když jsme vytvářeli branch `english` tak ona se vytvoří z bod Proto je třeba nějak říct větvi `english`, aby se aktualizovala a my mohli překládat dál, jak to uděláme? +### Merge +Merge vezme branch, kterou mergujete do aktulní branche. Pak ji "schová" do `merge commitu` a pokud se vyskytnout konflikty, tak vám poručí je vyřešit a pak změny commitnout a tím se vytvoří merge commmit. + +#### Merge Commit +Je zvlášní druh commitu, který drží ukazele na commity z branche, kterou mergujete. Takže je to commit, který v sobě schovává víc commitů. Výsledek merge je stejný jako výsledek rebasu - máte spojené dvě větve v jednu - s tim rozdílem, že merge vytvoří explicitní merge commit, kde jsou vyřešené konflikty, zatímco pomocí rebasu jen měníte stávající commity tak, aby nekonfliktovali. + +`Merge commit` se dá snadno smazat normálně pomocí `git reset --hard`. + +Takže namergujeme vetěv master do naší větve `english` pomocí příkazu: + +``` +$ git merge master +``` + ### Rebase Rebase je asi nejmocnější nástroj v Gitu, co existuje. Jdou s ním dělat neskutečný věci, ale prozatím stačí, když ho použijeme na aktualizaci větve `english` tak, aby její první commit měl za předka poslední, aktuální commit na větvi `master`. Prostě jí `pře-bázujeme`. @@ -548,4 +588,61 @@ Je zvlášní druh commitu, který drží ukazele na commity z branche, kterou m V Master a Dev branchích jsou vidět merge commity, aby bylo jasné, jaké branch se kdy udělala a kdo jí udělal. +## Ad.1 Branching - příklad přímo ze života programátora + +Je super že už umíme používat branche, mergovat a rebasovat, ale jak to použijeme při programování? + +Typický příklad že života je např. práce na webových stránkách. Pracujete na nějaké nové funkci na úvodní straně, v tom vám +přijde mail že je potřeba rychle něco hotfixnout nebo upravit taktéž na domovské straně, nebo kdekoliv jinde. + +Jak to teda uděláte když nemáte GIT? Máte několik možností, můžete soubor upravit přímo na FTP serveru na produkci, nebo jsi z FTP můžete stáhnout do další +složky původní verzi projektu, tam ji upravíte, otestujete a nahrajete zase zpátky. Pak také nesmíte zapomenout fix překopírovat do verze projektu kde máte rozpracovanou +novou funkčnost. No prostě prostě prasárna vedle prasárny. + +Ale pokud máte GIT, použijete elegatní způsob pomocí branchí. + +#### Vytvoření vývojové větve +``` +// vytvoření větve feature a přepnutí do ní rovnou +$ git checkout -b feature +``` + +Nyní začneme pracovat na nové fičuře, doděláme jen část a najednou nám přichází email nebo telefonát že je nutně potřeba něco opravit. Tak jednoduše commitneme to co máme: + +``` +$ git add --all +$ git cm "new menu" +``` + +Zatím ještě nechceme naše změny propisovat na web, protože ještě nejsou dokončeny a otestovány. Tak jak na to? + +Přepneme do masteru, pomocí `git checkout`. Poté provede požadovanou opravu a commitneme. + +``` +$ git checkout master +$ git add --all +$ git cm "footer email change" +``` + +Nyní můžeme beze strachu nahrát náš master na FTP a pak se pomocí `git checkout` přepnout zpátky na naši feature větev a pokračovat v práci. + +Jakmile dokončíme práci, můžeme pomocí `git commit --amend` připojit práci k předchozímu commitu s nedokončenou prací abychom nevytvářeli polovičaté commity. + +``` +$ git checkout feature +$ git add --all +$ git commit --amend +``` + +Co když ale budeme potřebovat fix, nebo úpravu co jsme udělali na masteru otestovat i s naší novou feature? Použijeme `git rebase`: + +``` +$ git rebase master +``` + +A máme hotovo, máme vytvořenou novou feature i s posledním fixem z masteru. Pokud by něco nefungovalo jednoduše to opravíme a commitneme. Jakmile máme vše otestováno, můžeme naši feature branch mergnout do masteru: +``` +$ git checkout master +$ git merge feature +``` diff --git a/git-flow/good-music.md b/git-flow/good-music.md deleted file mode 100644 index 272e3f6..0000000 --- a/git-flow/good-music.md +++ /dev/null @@ -1,2 +0,0 @@ -Vláček: https://youtu.be/atyvdC15HFA -Tommy Emmanuel https://www.youtube.com/watch?v=6lbvSBNLLoo diff --git a/git-flow/ucastnici/6.8.2016/luciest.md b/git-flow/ucastnici/6.8.2016/luciest.md deleted file mode 100644 index fd6ec77..0000000 --- a/git-flow/ucastnici/6.8.2016/luciest.md +++ /dev/null @@ -1,4 +0,0 @@ -# Opravené hodnocení -Nejvíc nejlepší a nejlovískovatější kurz. -A srdíčko k tomu, samozřejmě. <3 -**A žádný prázdný řádky!!!** diff --git a/logo.jpg b/logo.jpg new file mode 100644 index 0000000..0767834 Binary files /dev/null and b/logo.jpg differ diff --git a/ucastnici/6.8.2016/Ivorius.md b/ucastnici/6.8.2016/Ivorius.md deleted file mode 100644 index b63564a..0000000 --- a/ucastnici/6.8.2016/Ivorius.md +++ /dev/null @@ -1 +0,0 @@ -Zkoum kolen pes net. Zatm dobr, jen pr chybek v nastaven git config --global \ No newline at end of file diff --git a/ucastnici/6.8.2016/TomasNyvlt.md b/ucastnici/6.8.2016/TomasNyvlt.md deleted file mode 100644 index 415fa09..0000000 --- a/ucastnici/6.8.2016/TomasNyvlt.md +++ /dev/null @@ -1,4 +0,0 @@ -Issue5 - - -Je to super! diff --git a/ucastnici/6.8.2016/bohdanpartyk.md b/ucastnici/6.8.2016/bohdanpartyk.md deleted file mode 100644 index b48ec0b..0000000 --- a/ucastnici/6.8.2016/bohdanpartyk.md +++ /dev/null @@ -1 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat lorem vel sem lacinia hendrerit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas libero arcu, fermentum sollicitudin imperdiet sed, accumsan sit amet libero. Mauris sed mattis tellus, vel pretium mi. Phasellus laoreet dolor eu nulla congue, sollicitudin commodo justo consequat. Cras fringilla egestas arcu, ut commodo leo aliquet ut. Nam magna justo, suscipit id consectetur nec, porttitor vel lectus. Nam sit amet placerat libero. Quisque vitae lectus et odio gravida ullamcorper. Pellentesque tincidunt gravida massa, sed auctor lacus posuere non. Donec laoreet efficitur dui, ac efficitur leo iaculis a. Nam nec eros non neque blandit cursus sit amet at diam. Nulla at mauris est. Phasellus ac pellentesque magna. Nullam bibendum aliquam lacus, quis lacinia nunc tempus sed. Vestibulum maximus posuere nisl, ut condimentum nibh eleifend faucibus. diff --git a/ucastnici/6.8.2016/codeas.md b/ucastnici/6.8.2016/codeas.md deleted file mode 100644 index 28d71cb..0000000 --- a/ucastnici/6.8.2016/codeas.md +++ /dev/null @@ -1,3 +0,0 @@ -A středa je malý čtvrtek, -A úterý je malá středa -A pondělí je malé úterý \ No newline at end of file diff --git a/ucastnici/6.8.2016/jvaclavik.md b/ucastnici/6.8.2016/jvaclavik.md deleted file mode 100644 index 3b4ca1b..0000000 --- a/ucastnici/6.8.2016/jvaclavik.md +++ /dev/null @@ -1 +0,0 @@ -Trochu víc se mi líbil kurz o Ionicu, jak tady v Alze byl předtím, ale jinak dobrý. \ No newline at end of file diff --git a/ucastnici/6.8.2016/nodonisko.md b/ucastnici/6.8.2016/nodonisko.md deleted file mode 100644 index 63cdba8..0000000 --- a/ucastnici/6.8.2016/nodonisko.md +++ /dev/null @@ -1 +0,0 @@ -Nejlepší kurz ever <3 <3 <3 \ No newline at end of file diff --git a/ucastnici/6.8.2016/petr_kysela.md b/ucastnici/6.8.2016/petr_kysela.md deleted file mode 100644 index 57d61cd..0000000 --- a/ucastnici/6.8.2016/petr_kysela.md +++ /dev/null @@ -1,3 +0,0 @@ -# GIT - -- nauči se *.kit diff --git a/ucastnici/6.8.2016/petrhamacek.md b/ucastnici/6.8.2016/petrhamacek.md deleted file mode 100644 index 6d35564..0000000 --- a/ucastnici/6.8.2016/petrhamacek.md +++ /dev/null @@ -1,2 +0,0 @@ -Tenhle kurz je parádní. Jenom mi trochu uniká ta pokročilejší druhá část. -Na netu v mým forku vidím větem dev, ale u sebe v clonu jí nevidím. diff --git a/ucastnici/6.8.2016/qeef.md b/ucastnici/6.8.2016/qeef.md deleted file mode 100644 index 550ac0c..0000000 --- a/ucastnici/6.8.2016/qeef.md +++ /dev/null @@ -1 +0,0 @@ -content of some file diff --git a/ucastnici/6.8.2016/snizemic.md b/ucastnici/6.8.2016/snizemic.md deleted file mode 100644 index 5d5554b..0000000 --- a/ucastnici/6.8.2016/snizemic.md +++ /dev/null @@ -1 +0,0 @@ -Naprosto skvělý kurz, jsem rád, že už tomu konečně všemu rozumím!!! \ No newline at end of file diff --git a/ucastnici/6.8.2016/strakator.md b/ucastnici/6.8.2016/strakator.md deleted file mode 100644 index ee9869c..0000000 --- a/ucastnici/6.8.2016/strakator.md +++ /dev/null @@ -1 +0,0 @@ -Fast & Furious :) diff --git a/ucastnici/6.8.2016/vahyThe.md b/ucastnici/6.8.2016/vahyThe.md deleted file mode 100644 index 8499d13..0000000 --- a/ucastnici/6.8.2016/vahyThe.md +++ /dev/null @@ -1 +0,0 @@ -vim je best diff --git a/ucastnici/6.8.2016/vojtatranta.md b/ucastnici/6.8.2016/vojtatranta.md deleted file mode 100644 index f84e48d..0000000 --- a/ucastnici/6.8.2016/vojtatranta.md +++ /dev/null @@ -1 +0,0 @@ -Tenhle kurz je špatnej. diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..943e719 --- /dev/null +++ b/web/index.html @@ -0,0 +1,29 @@ + + + + + Webdev Olomouc - přednáška GIT + + + +
+

Webdev Olomouc - přednáška GIT

+
+ + + + +

+

Ahoj světe

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. +

+
+ + + \ No newline at end of file diff --git a/web/style.css b/web/style.css new file mode 100644 index 0000000..e69de29