$ sudo yum install git gitk git-gui nano
$ sudo apt-get install git gitk git-gui nano
gitk
a git gui
,
které jsou „grafické“, je proto potřeba nainstalovat
zvlášť.
nano
je jednoduchý textový editor,
který funguje v příkazové řádce.
Git standardně používá vim, který je ovšem
trochu složitější na naučení.
$ git config --global core.editor nano
vim
nebo
emacs
, zadej ho v nastavovacím příkazu
místo nano
.
$ nano mujsoubor.txtText se píše jako v „normálním“ editoru. Pomocí
Ctrl+O
se soubor uloží;
Ctrl+X
ukončí editor.
Kdybys zkratky zapoměla, dole má Nano malou nápovědu.
$ git config --global user.name "Adéla Novotná" $ git config --global user.email adela.novotna@example.czMůžeš samozřejmě použít i přezdívku, nebo dokonce falešný mail, ale v takovém případě budeš mít problémy, až se někdy zapojíš do týmového projektu.
$ git config --global color.ui true
cd
).
Pak vytvoř gitový repozitář (angl. repository):
$ git init Initialized empty Git repository in /tmp/tepo/.git/Na první pohled to vypadá že se nic nestalo: tenhle příkaz vytvořil skrytý adresář
.git
, do kterého uložil nějaké informace.
Přesvědč se přazem ls -a
(Linux) nebo
dir /a
(Windows).
Adresáře .git
je schovaný proto, že
ho spravuje Git. My v něm nebudeme nic měnit.
git status
, který
vypisuje informace o stavu repozitáře:
$ git status On branch master Initial commit nothing to commit (create/copy files and use "git add" to track)
basnicka.txt
a napiš do něj
nějakou básničku.
Měla by mít aspoň pět řádků, ať pak máme s čím pracovat.
Pak zkus znovu git status
: Git oznámí,
že v adresáři je soubor, o kterém ještě „neví“.
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
basnicka.txt
nothing added to commit but untracked files present (use "git add" to track)
U každého nového souboru musíme Gitu říct, že
chceme jeho obsah sledovat.
Proveď to se svojí básničkou:
$ git add basnicka.txta znovu zkontroluj stav repozitáře:
$ git status On branch master Initial commit Changes to be committed: (use "git rm --cachedTo, co je zelené („changes to be committed“), se přidá do další revize (angl. commit, kterou vytvoříš. Pojď tedy vytvořit revizi:..." to unstage) new file: basnicka.txt
$ git commitPo zadání tohoto příkazu se otevře editor, do kterého musíš napsat nějaký popisek, abys věděla, co tahle revize obsahuje za změny. Pro začátek napiš jen
První revize
.
Předvyplněné řádky začínající #
nech být
(nebo vymaž, podle chuti – Git je ignoruje).
Pak soubor ulož, a zavři editor.
$ git status On branch master nothing to commit, working directory cleanTenhle krátký výstup znamená: Od poslední revize (kterou jsi právě vytvořila) se nic nezměnilo.
git show
:
$ git show commit e0419fedda0a85a945a05a31bd58c5196c8d3b1d Author: Adéla Novotná <adela.novotna@example.cz> Date: Sun Jan 18 23:41:31 2015 +0100 První revize diff --git a/basnicka.txt b/basnicka.txt new file mode 100644 index 0000000..8416aea --- /dev/null +++ b/basnicka.txt @@ -0,0 +1,11 @@ +Haló haló +co se stalo? +Kolo se mi polámalo + +Jaké kolo? +Favoritka, +přeletěl jsem přes řidítka + +Co jste dělal? +Blbnul jsem, +do příkopy zahnul jsemVidíš unikátní označení revize, pomocí kterého se vždy bude dát dostat k této konkrétní verzi projektu, jméno autorky a datum vytvoření, popisek, a nakonec shrnutí změn: byl přidán soubor basnicka.txt s nějakým obsahem.
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: basnicka.txt
no changes added to commit (use "git add" and/or "git commit -a")
Soubor je opět červený! Něco se v něm změnilo!
Ale co?
Na to nám odpoví příkaz git diff
.
$ git diff diff --git a/basnicka.txt b/basnicka.txt index 8416aea..333757f 100644 --- a/basnicka.txt +++ b/basnicka.txt @@ -3,8 +3,7 @@ co se stalo? Kolo se mi polámalo Jaké kolo? -Favoritka, -přeletěl jsem přes řidítka +Favoritka! Přeletěl jsem přes řidítka! Co jste dělal? Blbnul jsem,Změny se ukazují po řádcích. Červeně, s -, jsou ukázány odebrané řádky; zeleně s + řádky přidané.
git diff
–
v jedné ze změn musí být chyba!
$ git add basnicka.txtA pro úplnost se znovu koukni co říká
status
– co je zelené, přidá se do další
revize.
$ git status On branch master Changes to be committed: (use "git reset HEADNež uděláš druhou revizi, ještě řeknu něco o tom, jak správně psát popisky k verzím. Na to je totiž úzus, který téměř všichni programátoři respektují: na prvním řádku je krátké shrnutí změn, následuje prázdný řádek, a pak detailnější popis důvodů ke změně a případně změny samotné. Snaž se délku řádků držet do zhruba 70 znaků; vodítkem můžou být předvyplněné řádky začínající..." to unstage) modified: basnicka.txt
#
.
Nemá cenu popisovat co je jasné ze změn samotných,
zajímavé jsou hlavně širší souvislosti a důvody
ke změnám.
Cokoli, co může přijít vhod až se revizi bude snažit
někdo (třeba ty za pár let) pochopit.
Druhá sloka: Sloučení posledních dvou řádků Sloučení řádků rozbíjí monotónnost formy básně – nestejný počet veršů ve sloce je prý moderní. (Ale, co si budeme povídat, hlavní důvod je líp ukázat co dělá `git diff`.) Použití vykřičníků místo čárky zdůrazňuje naléhavost situace.
git commit
vytvoř druhou revizi.
Pak ji zkontroluj:
$ git show commit 207f72f43d4a45a0ecb477f74d9f83bf7ddb3200 Author: Adéla Novotná <adela.novotna@example.cz> Date: Mon Jan 19 00:52:37 2015 +0100 Druhá sloka: Sloučení posledních dvou řádků Sloučení řádků rozbíjí monotónnost formy básně – nestejný počet veršů ve sloce je prý moderní. (Ale, co si budeme povídat, hlavní důvod je líp ukázat co dělá `git diff`.) Použití vykřičníků místo čárky zdůrazňuje naléhavost situace. diff --git a/basnicka.txt b/basnicka.txt index 18b2f69..9290e0e 100644 --- a/basnicka.txt +++ b/basnicka.txt @@ -3,8 +3,7 @@ co se stalo? Kolo se mi polámalo Jaké kolo? -Favoritka, -přeletěl jsem přes řidítka +Favoritka! Přeletěl jsem přes řidítka! Co jste dělal? Blbnul jsem,
git log
.
$ git log commit 207f72f43d4a45a0ecb477f74d9f83bf7ddb3200 Author: Adéla Novotná >adela.novotna@example.cz< Date: Mon Jan 19 00:52:37 2015 +0100 Druhá sloka: Sloučení posledních dvou řádků Sloučení řádku rozbíjí monotónnost formy básně – nestejný počet veršů ve sloce je prý moderní. Ale, co si budeme povídat, hlavní důvod je líp ukázat co dělá git diff. Použití vykřičníků místo čárky zdůrazňuje naléhavost situace, samozřejmě. commit 5ff0bba5ea8da3068be6491cd8f0069ddb321950 Author: Adéla Novotná >adela.novotna@example.cz< Date: Sun Jan 18 23:41:31 2015 +0100 První revizeGit log vypíše všecny revize od té nejnovější až po úplný začátek projektu.
git help log
.
„Ven“ z dokumentace se opět dostaneš klávesou
q.
git log --oneline --graph --decorate --cherry-mark --boundary
.
Chceš-li tyhle možnosti studovat, začni v tomto
pořadí, a dej si pauzu vždycky když přestaneš
rozumět :)
gitk
.
$ gitk --allTenhle program vypadá celkem šeredně (skoro jako by ho psali programátoři, které místo designu zajímá co je „vevnitř“), ale pro naše účely postačí. Zkus se v něm trochu zorientovat, pak ho zavři, udělej dalších pár revizí, a koukni se na ně přes
git log
a gitk --all
.
git branch
.
$ git branch
* master
Je tam jenom jedna, a jmenuje se master
– to je tradičně jméno „hlavní” větve.
git branch
, jen tomu příkazu dáš navíc
jméno nové větve.
Třeba budeš chtít k básničce doplnit jméno autora,
tak větev pojmenuješ doplneni-autora
.
$ git branch doplneni-autora
$ git branch
* master
doplneni-autora
Tenhle příkaz sice udělal novou větev,
ale nepřepnul do ní.
Hvězdička ve výstupu z git branch
ukazuje,
že stále pracuješ v master
.
Na přepnutí budeš potřebovat další příkaz:
$ git checkout doplneni-autora
$ git branch
master
* doplneni-autora
Tak. Teď jsme „ve” větvi doplneni-autora
.
Doplnit jméno do souboru basnicka.txt
,
a pomocí git add
a git commit
udělej novou revizi.
Pak koukni na gitk --all
, jak to vypadá:
Aktuální větev je zvýrazněná tučně,
a master
je stále na starší revizi.
master
, a vytvoř z ní
větev doplneni-jmena
.
Pak se na tuhle novou větev přepni.
$ git checkout master
$ git branch doplneni-jmena
$ git checkout doplneni-jmena
$ git branch
master
doplneni-autora
* doplneni-jmena
Doplň do souboru jméno básně, a pomocí
git add
, git commit
ulož revizi.
Všechno zkontroluj přes gitk --all
.
Dává to smysl?
master
,
a použij příkaz git merge
, který
sloučí jinou větev s tou aktuální.
Příkazu musíš dát jméno větve, kterou chceš sloučit.
$ git checkout master
$ git merge doplneni-jmena
Updating c33e43e..561d3ab
Fast-forward
basnicka.txt | 3 +++
1 file changed, 3 insertions(+)
Sloučeno! To „Fast-forward” znamená, že
vlastně nebylo co slučovat – jen se do větve
master
přidaly nové změny.
Zkontroluj v gitk --all
, jak to vypadá.
merge conflict
(slučovací konflikt).
V tom případě obnov soubor v editoru, kde se objeví
obsah z obou konfliktních verzí. Soubor uprav ho tak,
jak by měl vypadat, ulož, a zadej
git commit
$ git merge doplneni-autora
Auto-merging basnicka.txt
Merge made by the 'recursive' strategy.
basnicka.txt | 1 +
1 file changed, 1 insertion(+)
Povedlo se?
Pokud ano, můžeš staré větve vymazat – všechny jejich
změny jsou v master
, a nemá na nich cenu
pracovat dál.
$ git branch -d doplneni-autora
Deleted branch doplneni-autora (was 230ace8).
$ git branch -d doplneni-jmena
Deleted branch doplneni-jmena (was 561d3ab).
$ git branch
* master