Co je Git?

Git

Co je Git?
« kdy: 31. 05. 2018, 09:07:08 »
Ahoj, muze mi nekdo vysvetlit, co je to git? Cetl sem uz dost clacnku, ale stale tomu nejako nerozumim. Dik
« Poslední změna: 31. 05. 2018, 09:42:44 od Petr Krčmář »


dword

Re:Co je git??
« Odpověď #1 kdy: 31. 05. 2018, 09:33:25 »
Ahoj, muze mi nekdo vysvetlit, co je to git? Cetl sem uz dost clacnku, ale stale tomu nejako nerozumim. Dik

A cemu nerozumis?

Lepsi by bylo kdybys napsal jak to chapes, s tim uz se da nejak pracovat. Ale kdyz tady nekdo napise to co uz jsi cetl, lec neporozumel, tak k cemu to bude dobre? Je dost pravdepodobne ze to dopadne stejne.

Git je verzovaci system. Ucel verzovacich systemu je ukladat historii projektu. Diky tomu se da vracet do ruznych starsich verzi projektu a neco na nich provadet. Take je dohledatelne kdo a kdy a co do projektu pridal.

Krome toho verzovaci systemy take vetsinou nejak resi praci na jednom projektu ve vice lidech, tak aby si "nelezli do zeli", presto ze napriklad pracuji na stejnych souborech.

Dalsi prednost Gitu je ze umoznuje jednoduse projekt vetvit a timpadem je mozno pracovat na necem aniz bych jakkoliv komplikoval praci druhym, ci aniz bych riskoval ze hlavni vyvojova linie projektu se nejak rozbije.

Kdyby te zajimalo vic, tak se budes muset lepe zeptat.

PetrM

Re:Co je git??
« Odpověď #2 kdy: 31. 05. 2018, 09:52:18 »
Takže na počátku bylo to, že programátoři začali psát zdrojáky - textový soubory s instrukcema. A na jednom programu jich dělalo několik, navíc se zdroják vyskytoval v několika verzích programu. Tak se zamysleli a udělali systém pro správu zdrojáků. Ten si pamatuje, kdy, kdo a co změnil a jaká verze z toho vzešla.

No a těchhle aplikací nylo několik generací:
1. generace: Repozitář (= soubory k projektu) byly někde na serveru a vývojáři si stáhli požadovanou verzi. Když někdo dělal se souborem, tak ho zamknul a po skončení úprav odemknul a nahrál změny na server. Ostatní si to u sebe aktualizovali. To byl např. MS SourceSafe.
2. generace fungovala bez zamykání, tam si po skončení úprav vývojář stáhnul aktuální verzi ze serveru a sloučil změny, pak to odeslal. Většina změn se sloučila automaticky, rozhodnout musel jenom o úpravách stejných řádků. Tam patří třeba CSV a SVN.
3. generace řeší to, že není potřeba jeden centrální repozitář (každý má svůj klon) a že vývojář může experimentovat, než něco nasdílí, aniž by to viděli ostatní. A to je třeba GIT a Mercurial.

Tyhle prográmky toho ale umí ještě o něco víc, bylo by to na článek. Klidně bych ho i napsal, ale až tehdy, kdy zmizí z fóra zadávání mailu a ta GDPR chvostovina.


Kit

Re:Co je Git?
« Odpověď #3 kdy: 31. 05. 2018, 09:59:04 »
Ahoj, muze mi nekdo vysvetlit, co je to git? Cetl sem uz dost clacnku, ale stale tomu nejako nerozumim. Dik

V této knize najdeš vše vysvětleno
https://www.root.cz/knihy/pro-git/

Ještě bych dodal, že se nepoužívá jen pro zdrojáky.

Git

Re:Co je Git?
« Odpověď #4 kdy: 31. 05. 2018, 10:29:26 »
Pokud sem to teda dobre pochopil, tak kdyz budu chtit nejakou starsi/jinou verzi nejaky apky/softu z nejekych duvodu, tak si prave na tom gitu stahnu dejme tomu zdrojak, od nejakeho autora, ktery tam udelal zmeny, ktere mne vyhovuji k potrebam. Skompiluju a mam to, co mi vyhovuje. Tak nejak, laicky? 


Re:Co je Git?
« Odpověď #5 kdy: 31. 05. 2018, 10:37:56 »
Podstatné je, že s tím zdrojákem stáhneš i celou historii jeho tvorby. Můžeš se tak vracet v čase, navázat při další práci na libovolný předchozí stav a podobně. Pokud jsi někdy před úpravou konfigurace psal

Kód: [Vybrat]
$ cp konfigurace konfigurace.old
tak je přesně Git to, co v takovou chvíli potřebuješ. Protože když měníš jakýkoliv textový soubor, můžeš si ukládat historii změn. Jako bys postupně vytvářel konfigurace.1, konfigurace.2, konfigurace.3 a tak dále. Jen to tu za tebe Git dělá sám.

Když pak v kroku 13 zjistíš, že to je celé nesmysl a vůbec jsi ty změny neměl dělat, tak se prostě vrátíš o deset verzí zpět. Všechny ty změny máš ale pořád uložené v historii Gitu, kdybys je potřeboval za rok znovu. Nic nemažeš, nic se neztrácí.

Marek

Re:Co je Git?
« Odpověď #6 kdy: 31. 05. 2018, 10:41:05 »
Pokud sem to teda dobre pochopil, tak kdyz budu chtit nejakou starsi/jinou verzi nejaky apky/softu z nejekych duvodu, tak si prave na tom gitu stahnu dejme tomu zdrojak, od nejakeho autora, ktery tam udelal zmeny, ktere mne vyhovuji k potrebam. Skompiluju a mam to, co mi vyhovuje. Tak nejak, laicky?

+/- si to trefil. Proste to drzi historii vyvoje, verze, vyvojove vetve (nekdy slepe a nepouzite) atd. Navic v spojeni s nejakou nadstavbou nad gitem jako je GitHub nebo BitBucket ziskas komfortni nastroje na spravu tech verzi, moznost code review pred tim nez nove kody budou zarazeny do hlavni vetve atd. Moznosti je vyuziti je spousta. Ale primarne je to uschovna soboru kde kazda zmena je zaznamenana a je mozne se historicky vratit zpet.

PetrM

Re:Co je Git?
« Odpověď #7 kdy: 31. 05. 2018, 11:10:52 »
No a ještě jsou tady pokročilejší vychytávky, jako slučování větví (mám třeba větev pro verzi 1 a 2, opravím chybu ve verzi 2 a sloučím do verze 1), spuštění skriptu po odeslání (například spustí kompilaci a test, nebo generování dokumentace ke knihovně) atd. Prostě uděláš změny, odešleš s jejich popisem a dál se o to nestaráš, kdykoliv si je můžeš najít nebo vrátit.

Re:Co je Git?
« Odpověď #8 kdy: 31. 05. 2018, 11:15:42 »
Pokud sem to teda dobre pochopil, tak kdyz budu chtit nejakou starsi/jinou verzi nejaky apky/softu z nejekych duvodu, tak si prave na tom gitu stahnu dejme tomu zdrojak, od nejakeho autora, ktery tam udelal zmeny, ktere mne vyhovuji k potrebam. Skompiluju a mam to, co mi vyhovuje. Tak nejak, laicky?

Myslím že míříte k jádru pudla.

Třeba já osobně jsem do žádného projektu nikdy nic necommitnul (ne v tom smyslu že bych si kvůli tomu zřizoval account s právem commitu), ale prakticky denně z GITu tahám zdrojáky věcí, které se mi hodí. Proč: v Linuxových distribucích bývají binární balíčky v různě uleželé starší verzi. O pár měsíců až let pozadu za aktuální verzí od autora dané "appky" jak píšete. Často mi v "distro-balíčku" schází nějaká novější fičura, která už je ale v upstreamu v novější verzi programu. Z druhé strany mnohé menší open-source projekty se moc nenamáhají pravidelně releasovat, tzn. nehrají na nějaké "milníkové" oficiálně svěcené verze. Důležité je, že jednotlivé open-source projekty potřebují mít svoje zdrojáky někde "uskladněné", i pro svou pracovní potřebu. Ty nejlepší je mají trvale vystavené volně na webu, v té nejčerstvější verzi. A to nejlíp jak? V GITu. Dříve v CVS nebo SVN apod. Tzn. na internetu není jenom bleeding edge verze, ale tato včetně celé historie, hezky přehledně. Kdokoli může přijít a vybrat si buď nejčerstvější stav, nebo libovolný commit v historii. Pro autory/maintainery projektu tenhle "veřejný" read-only provoz včetně kompletní historie neznamená žádnou práci navíc (pokud beztak musí používat verzovací systém interně pro kooperativní vývoj). A já nemusím tahat z webu nějaký releasnutý tarball s kulatou verzí, stáhnu si z GIT repa poslední vývojovou verzi. Nebo nějakou předchozí, pokud bleeding edge není stabilní. Spousta OSS projektů má ale čerstvé vývojové verze natolik dobře testované, že prakticky nenarážím na bugy ani ve skutečně živém posledním vývojovém kódu. Přinejhorším stáhnu poslední nightly, pokud je projekt nebezpečně živý (mění se pod rukama). Jasně - musím si to pak ze zdrojáků u sebe zkompilovat. Jsme na linuxu ne... potažmo čerstvou verzi různých projektíků nejsnáz zkompiluju na čerstvém populárním distru blízkém vanilce (nějaký poslední Debian nebo ještě Ubuntu - nevím jak Klobouk/Fedora, poslední dobou je moc často nedostanu do ruky).

Vynikající věc je Gitweb = webový obličej do GITu. Když se chci podívat, jak je něco udělaného v kernelu (a vím kam přesně se chci podívat), nebo mi nějakou periferii nebere driver ve starším distribučním kernelu, a chci se mrknout, jestli PCI IDčka už přibyla do vanilky, podívám se skrz Gitweb - aniž bych musel stahovat tarball k sobě na disk, rozbalit ho, CD do adresáře apod. Z Gitwebu i poměrně snadno zjistím, jakou má daný soubor historii, kdy se na něj sahalo, a často už z popisu commitů vidím, ve které verzi Kernelu a cca kdy časově přibyla podpora pro můj hardware. Bohužel jsem se zatím nenaučil v gitwebu rychle grepovat nebo dohledávat deklarace datových typů, maker apod. napříč mezi soubory (cross-referencing) - možná jsem jenom nešikovný, že tuhle grepovací práci páchám stále na lokále v shellu (komfortnější by asi bylo nějaké IDE, ale to jsme pořád na lokálu. Zjišťuju že ve spoustě "best practices" jsem dost zakrnělý.)

andrej

Re:Co je Git?
« Odpověď #9 kdy: 31. 05. 2018, 12:13:57 »
Ahoj, muze mi nekdo vysvetlit, co je to git? Cetl sem uz dost clacnku, ale stale tomu nejako nerozumim. Dik
kedysi ked este neboli vsade plastove alebo hlinikove okna tak sa git daval medzi sklo a dreveny ram. Potom Torvalds potreboval meno pre svoj novy system spravy verzii suborov a slovo git (vyznamovo nieco medzi otravnym a neprijemnym clovekom alebo tiez proste hovado https://www.urbandictionary.com/define.php?term=Git) sa mu zdal dostatocne cool.

uuuuuuuu

Re:Co je Git?
« Odpověď #10 kdy: 31. 05. 2018, 12:18:15 »
Andrej dik, to mi nedoslo, ze git je slovensky kyt.

Kit

Re:Co je Git?
« Odpověď #11 kdy: 31. 05. 2018, 12:31:29 »
Ještě tady nebylo uvedeno:
  • Git mě odnaučil zakomentovávat kusy kódu, pokud si chci něco vyzkoušet. Prostě ty řádky smažu, protože je mohu kdykoli obnovit, dokonce i selektivně jednotlivé řádky.
  • Při aktualizaci projektu se přenáší pouze změny v souborech. Ušetří se hromada času, přenosové kapacity i diskového prostoru.
  • Bezpečnost. I kdyby padl server a N-1 vývojářů přejelo auto, projekt přežije.
  • Přenositelnost. Při vývoji na různých platformách se Git postará o potřebné konverze.
  • Rozšiřitelnost. Mám v Gitu dost maker, která ani nemusí souviset s Gitem, ale souvisí s projektem.
  • Přehlednost. Ke každému commitu tě Git vyzve, abys stručně popsal, co jsi udělal. Pokud ty komentáře píšeš svědomitě, tak se budeš dobře orientovat v historii.
  • Rychlost. Commit je záležitostí několika sekund, klidně můžeš poslat třeba čtyři za minutu. To povzbuzuje k pravidelnému commitování po každé ucelené změně, například v jedné metodě.
  • Nezávislost na netu. I když jsi o víkendu někde na chalupě bez připojení, můžeš vesele verzovat. Až se připojíš, tak změny odešleš.