Git: Co to je a jak s ním pracovat?

Osnova:

Co to je?

Git je verzovací systém. Tedy sleduje změny souborů.

Je často používán programátory, jak v týmech, tak u jednotlivců.

V týmech to má výhodu že můžou pracovat na jednom projektu najednou.

Je to nejpopulárnější verzovací systém na planetě.

Možná jste se s ním už setkali v podobě například webu Github.
Github je takzvaný Git server o kterém mluvím níže.

Jak funguje?

Git ukládá změny ve snapshotech. Tedy jakoby okopíruje celý projekt. Ale ukládá jen změny. Takže soubory co nebyly změněné tak na ně je jen odkázáno aby se ušetřilo místo.

Možná ukládat jen změny přímo v souboru, a ne cely soubor by bylo lepší, pro šetřeni místem. Ale ty změny by se následně musely spočítat. Čim dal v historii by jste se chtěli podívat tím by to bylo horší. Se snapshoty to sice zabere o trochu vice místa, ale je to je téměř instantní.

Stavy souborů

Git také uchovává soubory v různých stavech jako:

  • Modified: Změny které nebyly přesunuty do stavu Staged.
  • Staged: Označené změny které půjdou do dalšího Commitu.
  • Committed: Změny které jsou bezpečně uložené v lokální repository.
Commity a repositories

Repository je jakoby balíček všech snapshotů co jste kdy udělali nebo udělal váš kolega. Obsahuje tedy veškerou historii změn. Když naklonujete repository tak se stáhnou i veškeré změny. Toto umožňuje Gitu operovat lokálně bez neustálé komunikace se serverem.

A Commit je vlastně snapshot s nějakými dalšími informacemi jako:

  • Parrent: Odkaz na předchozí Commit. Nebo vice Commitů v případě merge.
  • Author/Committer: Metadata o autorovi a času kdy byly změny commitnuty
  • Message: Krátký popis provedených změn
Branches a merging

Branch nebo česky „větev“ je v Gitu velmi užitečná věc. Můžete si to představit jako časové linie. Máte hlavní linii „master“ a pak můžete na jakémkoli bodu v historii vytvořit například větev „new_feature“. Teď mate dvě verze vašeho projektu a můžete nezávisle na sobě provádět změny.

Tyto branches nebo větve můžete následně pomocí merge spojit. Git je často dokáže spojit sám, ale někdy se muže vyskytnout takzvaný merge conflict. Ten vzniká když na obou branches uděláte změny na stejném místě. Git toto pak označí a musí se manuálně vybrat změny které budou ponechány. Nebo se tomu dá zabránit dobrým workflow, který se snaží předejít takovým konfliktům. Nějaký takový workflow si vysvětlíme níže.

Git server a client

Git Servery jsou například:

Tyto servery v podstatě ukládají remote/vzdálené repositories. A přidává další funkce jako code review, merge/pull requests, issues a tak dále. Hlavně tedy umožňuje developerům jednoduše spolupracovat na jednom projektu zároveň.

Git Client je software, který spravuje vaše lokální repository a komunikuje se serverem. Git clientů je hodně. Zde je pár příkladů:

Jak ho používat?

Můžete si ho jednoduše stáhnout a nainstalovat z oficiální stránky. Doporučuju vám také si nainstalovat nějaký grafický Git client. Nejlépe Lazygit, ale to nemusí být nejlepší pro začátečníky. A dále asi SourceGit. Musíte vyzkoušet sami co vám vyhovuje. Samozřejmě můžete používat Git z příkazového řádku nebo použit Git GUI což je integrované přímo v Gitu. Není to moc pokročilé UI, ale asi to stačí na nějaké zakladní operace.

Základní příkazy

Nějaké základní příkazy v Git CLI

Bash
git init # inicializuje repository v aktuálním adresáři
git add . # označí všechny soubory jako staged
git commit -m "{popis změn}" # commitne staged soubory a přidá k tomu popis změn
git branch {jméno nové branch/větve} # vytvoří novou branch/větev s daným jmenem
git checkout {jméno branch/větve} # přepne na větev s daným jménem
git merge {jméno branch/větve} # spojí dvě branches dohromady. Důležité poznamenat že spojí uvedenou větev do té na jaké aktuálně jste
git pull # aktualizuje aktuální branch s jejím remote protějškem
git remote add {remote name} {remote url} # přidá remote repository
git push # pošle změny na remote repository
git status # zobrazí aktuální branch a unstaged soubory
Bash
Workflow

Je hodně různých workflow. Zde jich je pár popsaných:

Centralizovaný Workflow

Jednoduchý model kdy je jedna centrální „master“ branch do které všichni posílají své změny.

Výhody:

  • Velmi podobný tradičním verzovacím systémům
  • Jednoduchý pro začátečníky
  • Vhodný pro jednotlivce

Nevýhody:

  • Muže způsobovat hodně konfliktů
  • Projekt muže být chaotický
Feature Branch Workflow

Pro každou novou feature nebo bug fix se vytváří nová branch a po dokončení se mergenou do „master“ branch. K tomuto se ještě můžou vytvářet pull reqesty a issues na vašem zvoleném Git serveru pro lepší organizaci.

Výhody:

  • Menší šance konfliktů
  • V případě konfliktů je jednoduší je vyřešit
  • Organizovaná struktura projektu
  • Vhodný pro větší týmy i jednotlivce

Nevýhody:

  • Těžší pro začátečníky
GitFlow Workflow

V podstatě to samé jako Feature Branch Workflow, ale místo do „master“ branch se všechno posílá do „develop“. Jakmile je „develop“ branch připravena tak se mergene do „master“ branch a tím vznikne nový release/verze programu.

Výhody:

  • Menší šance konfliktů
  • V případě konfliktů je jednoduší je vyřešit
  • Organizovaná struktura projektu
  • Stabilní finální release

Nevýhody:

  • Těžší pro začátečníky
  • Musí se spravovat verzování a vice branches/větve
Forking Workflow

Hlavně používaný v open-source projektech. Každý contributor vytvoří fork (kopii) hlavní repository. Poté co jsou provedeny změny muže contributor poslat změny zpátky do hlavní repository přes pull/merge request.

Výhody:

  • Organizovaná struktura projektu
  • Muže spolupracovat teoreticky nekonečné množství lidí

Nevýhody:

  • Správci hlavní repository musí kontrolovat a schvalovat pull/merge reqests

Existují určitě další workflows, ale toto jsou nejpoužívanější. Já osobně používám Feature Branch Workflow. A to i na projektech na kterých pracuju sám, protože mám pak všechno lépe organizované.

Zdroje:

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 1

No votes so far! Be the first to rate this post.


Uveřejněno

v

Komentáře

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *