× Aktuálně z oboru

SHIELD Experience Upgrade 7 – méně hledání a více zábavy [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]
Celá zprávička [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]

GitMagic (2) – základní triky

[ http://programujte.com/profil/10927-jakub-kulhan/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/14523-martin-simecek/ ]Google [ ?rel=author ]       19. 6. 2009       18 924×

Další kapitola GitMagic, tentokráte představující základy práce s Gitem jako takovým. Ideální pro ty, co se o Gitu zrovna dozvěděli nebo s ním začínají.

Než se potápět do moře Gitovských příkazů, radši použijte tyto základní příklady použití ke smočení si chodidel. Pomineme-li jejich jednoduchost, každý z nich je užitečný. Ve svých prvních měsících s Gitem jsem si opravdu nikdy nedovolil jít dál, než co naleznete v této kapitole.

Ukládání stavu

Chystáte se na něco drastického? Než tak učiníte, udělejte si zálohu všech souborů v současném adresáří pomocí:

$ git init
$ git add .
$ git commit -m "Moje první záloha"

Pokud se vaše úpravy nevydaří, spusťte:

$ git reset --hard

Čímž se dostanete tam, kde jste byli před úpravami. K uložení stavu znovu spusťte:

$ git commit -a -m "Další záloha"

Přidávání, mazání, přejmenovávání

Příkaz výše zaznamená pouze změny souborů, které byly přítomny, když jste poprvé spustili git add. Pokud chcete přidat nové soubory či podadresáře, musíte to Gitu říct:

$ git add NOVE…

Podobně, pokud chcete, aby se Git o nějaké soubory již více nezajímal, možná proto, že jste je vymazali:

$ git rm STARE…

Přejmenovat soubor je to samé jako říct Gitu, aby zapomněl na starý soubor, a přidat nový. Existuje také zjednodušení git mv, které má stejnou syntaxi jako příkaz mv. Například:

$ git mv STARY NOVY

Pokročilé zpět a znovu

Někdy se chcete vrátit a zapomenout na všechny změny po nějakém bodu, protože jsou všechny špatně.

$ git log

Toto vám ukáže seznam posledních commitů a jejich SHA1 hashe. Napište:

$ git reset --hard SHA1_HASH

k obnovení stavu v daném bodě a vymazání všech novějších commitů nadobro.

Jindy je zase potřeba jednoduše skočit zpátky ke staršímu stavu. V tomto případě napište:

$ git checkout SHA1_HASH

Toto vás vezme zpátky v čase, přičemž zachová všechny novější commity. Avšak pokud nyní provedete úpravy a commit, budete, podobně jako je to s cestováním v čase ve sci-fi filmech, v alternativní realitě, protože všechny akce jsou odlišné od toho, co jste udělali prvně.

Této alternativní realitě se říká „větev“ (ang. branch) a povíme si o tom později. Pro tentokráte si prostě zapamatujte, že:

$ git checkout master

vás vezme zpátky do současnosti. Další důležitá poznámka, abyste zastavili Git ve stěžování si, vždycky prověďte commit nebo reset před checkoutem.

Kdybychom se vrátili zpět k analogii počítačových her:

  • git reset --hard: Načti starou uloženou pozici a vymaž všechny uložené pozice novější než ta, která je právě načtená.
  • git checkout: Načti starou pozici. Pokud ale budete pokračovat v hraní, postup ve hře se bude lišit od novějších uložených poprvé. Jakákoli hra, kterou od teďka uložíte, skončí v jiné větvi reprezentující alternativní realitu, do které jste vstoupili. O tom ale později…

Můžete si vybrat, že chcete obnovit pouze určité soubory a podadresáře tím, že je připojíte na konec příkazu:

$ git checkout SHA1_HASH nejaky.soubor dalsi.soubor

Dávejte si ale pozor, protože tato forma checkoutu může naprosto potichu přepsat vybrané soubory. Abyste zabránili tomu nejhoršímu, vždycky před checkoutem nejdříve proveďte commit, obzvláště pokud s Gitem začínáte. Obecně, pokud si nejste nějakou operací jistí, ať se jedná o příkaz Gitu či ne, nejdříve spusťte git commit -a.

Nemáte rádi kopírování a vkládání hashů? Pak můžete použít:

$ git checkout :/"Moje první zá"

ke skoku na commit, jenž začíná na Moje první zá. Taktéž můžete skočit na pátý poslední uložený stav:

$ git checkout master~5

Vracení se

U soudu mohou být některé věci vyškrtnuty ze záznamu. Podobně můžete vzít určité commity a vrátit je.

$ git commit -a
$ git revert SHA1_HASH

vrátí pouze commit s předaným hashem. Pokud spustíte git log, uvidíte, že vrácení se je zaznamenáno jako nový commit.

Stahování souborů

Kopii projektu spravovaného pomocí Gitu získáte napsáním:

$ git clone git://server/cesta

Například, pokud chcete získat všechny soubory, které jsem použil pro vytvoření této stránky (pozn. překl.: této stránky):

$ git clone git://git.or.cz/gitmagic.git

Již brzy si rozebereme příkaz clone podrobněji.

Bleeding edge

Pokud již máte kopii projektu staženou pomocí git clone, můžete aktualizovat na novejší verzi s:

$ git pull

Uveřejnění v sáčku

Předpokládejme, že jste napsali skript, který byste rádi sdíleli s ostatními. Mohli byste jim prostě říci, aby ho stáhli z vašeho počítače, ale pokud by tak udělali zatímco byste skript vylepšovali nebo dělali experimentální změny, mohlo by to pro ně skončit špatně. Samozřejmě, že toto je důvod, proč existují vydávací cykly. Vývojáři mohou na kódu pracovat pořád, ale uveřejní ho pouze, cítí-li, že je kód prezentovatelný.

K tomu, abyste toto zvládli s Gitem, v adresáři se skriptem spusťte:

$ git init
$ git add .
$ git commit -m "První vydání"

Potom můžete ostatním říct, aby si skript stáhli pomocí:

$ git clone vas.pocitac:/cesta/ke/skriptu

Předpokladem je, že ostatní mají k vašemu počítači přístup skrz SSH. Pokud tomu tak není, spusťte git daemon a řekněte ostatním, aby vytvořili kopii následovně:

$ git clone git://vas.pocitac/cesta/ke/skriptu

Odteď vždycky, když je skript zralý vydání:

$ git commit -a -m "Další vydání"

a ostatní mohou aktualizovat jejich verzi vstoupením do adresáře obsahujícího skript a napsáním:

$ git pull

Ostatní nikdy neskončí s verzí skriptu, kterou nechcete, aby viděli. Samozřejmě tenhle trik funguje pro cokoli, nejen skripty.

Co jsem to udělal?

Zjistěte, jaké změny jste udělali od posledního commitu s:

$ git diff

Nebo od včerejška:

$ git diff "@{yesterday}"

Nebo mezi určitou a druhou poslední verzí:

$ git diff SHA1_HASH "master~2"

V každém případě je výstupem patch, který může být použit s git apply. Vyzkoušejte si také:

$ git whatchanged --since="2 weeks ago"

Často se brouzdám historií s qgit, jelikož má hezké grafické rozhraní (GUI), nebo pomocí tig, textového rozhraní (TUI), které pracuje dobře na pomalých linkách. Alternativně si nainstalujte webserver, spusťte git instaweb a otevřete jakýkoli webový prohlížeč.

Cvičení

Nechť jsou A, B, C a D čtyři úspěšné commity, kde B je stejný jako A s tím, že pár souborů bylo odstraněno. Řekněme, že chceme přidat tyto soubory zpátky v commitu D a ne B. Jak na to?

  1. Rozdíl mezi A a B jsou odstraněné soubory. Můžeme vytvořit patch reprezentující tuto změnu a aplikovat ho:
    $ git diff B A | git apply
  2. Jelikož soubory jsou uloženy v commitu A, prostě si je vyvoláme:
    $ git checkout A SOUBORY...
  3. Na změnu mezi A a B se můžeme dívat jako na akci, kterou chceme vrátit:
    $ git revert B

Která z těchto možností je nejlepší? Ta, která se vám líbí nejvíce. S Gitem je jednoduché docílit toho, co chcete, a často je to mnoho způsobů, jak to udělat.

Tento článek je překladem druhé kapitoly – Basic Tricks [ http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html ] – z GitMagic [ http://www-cs-students.stanford.edu/~blynn/gitmagic/ ] od Bena Lynna. V další kapitole se můžete těšit na podrobnější informace o klonování repozitářů.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2009061700-gitmagic-2-zakladni-triky/ ].