Prozkoumání správy verzí pomocí Gitu
Existují různé typy systémů správy verzí (VCS), ale obecně je možné je kategorizovat jako centralizované a distribuované. V posledních letech (částečně kvůli rostoucí popularitě DevOps) získala druhá kategorie významnou popularitu a Git se stal de facto standardem v moderním vývoji softwaru. Tato konkrétní služba VCS by byla nejvhodnější volbou pro organizaci v našem ukázkovém scénáři, zejména s ohledem na záměr používat GitHub jako cílovou platformu pro přechod DevOps. V této lekci prozkoumejte použití Gitu jako správy verzí.
Centralizovaná versus distribuovaná správa verzí
Centralizované systémy správy verzí (CVCS) i systémy správy distribuovaných verzí (DVCS) nabízejí možnost spravovat a sledovat změny v projektech vývoje softwaru. Hlavní rozdíly mezi nimi souvisejí se způsobem, jakým implementují úložiště a spolupráci. Zejména:
- Umístění úložiště: V centralizovaných systémech existuje jedna centralizovaná instance úložiště obsahující úplnou historii projektu. V distribuovaných systémech by každý člen týmu obvykle měl jednu plně funkční místní kopii celého úložiště, která může obsahovat celou historii verzí.
- Síťové připojení: V centralizovaných systémech se vyžaduje přístup k centralizované instanci úložiště k provádění mnoha akcí, včetně aktualizací a načítání historie. V distribuovaných systémech lze všechny aktivity provádět s místní kopií úložiště.
- Model pro spolupráci: V centralizovaných systémech si vývojáři z centrální instance úložiště přes síť stáhnou soubory, aby je mohli upravovat a potvrdit změny. Tím zabráníte, aby jiní uživatelé upravovali již rezervované soubory. V distribuovaných systémech vývojáři provádějí a potvrdí změny v místní kopii úložiště, která se v určitém okamžiku později synchronizují s jinými kopiemi.
- Model větvení a slučování: V centralizovaných systémech se větvení a slučování obvykle vyžaduje koordinace s ostatními. V distribuovaných systémech lze větve vytvářet nezávisle v místních kopiích a následně je sloučit.
Stojí za zmínku, že i když distribuovaný model nespoléhá na centrální úložiště (v tradičním smyslu), je běžné implementovat jednu kopii úložiště, která je hostovaná službami, jako je GitHub, GitLab nebo Bitbucket. Tato instance slouží jako ústřední bod spolupráce a synchronizace.
Terminologie Gitu
Aby bylo možné pracovat s Gitem, je důležité se seznámit s jeho terminologií. Některé koncepty jsou pro Git jedinečné a liší se od ostatních DVCS. Mezi nejzákladnější termíny Gitu patří:
- Pracovní strom: adresářová struktura, která obsahuje všechny soubory projektu.
- Úložiště (běžně označované jako úložiště): Adresář umístěný na nejvyšší úrovni pracovního stromu, který hostuje všechny soubory projektu spolu s historií verzí těchto souborů.
- Klon: Akce vytvoření kopie vzdáleného úložiště na místním počítači pro práci na projektu, ke kterému máte přístup.
- Fork: Akce vytvoření kopie vzdáleného úložiště hostované na GitHubu pro práci na projektu, ke kterému nemáte přístup. Fork se obvykle používá, pokud chcete přispívat do projektu někoho jiného nebo vytvořit vlastní verzi takového projektu. I když nemáte přístup k zápisu do původního úložiště, můžete fork plně spravovat.
- Potvrzení: snímek změn provedených v souborech v úložišti v určitém časovém okamžiku. Commity jsou využívány k zaznamenávání a ukládání změn.
- Pracovní oblast je přechodné umístění (které není součástí úložiště), kde se před potvrzením připraví změny souborů v pracovním stromu. Umožňuje vývojářům vybrat změny, které mají v úmyslu potvrdit.
- Větev: pojmenovaná řada propojených commitů. Větev jednoduše představuje odlišnou verzi projektu. To umožňuje pracovat na různých částech projektu najednou, aniž by to mělo vliv na jeho hlavní verzi. Nejnovější commit ve větvi se nazývá head. Výchozí větev vygenerovaná automaticky při inicializaci úložiště se nazývá hlavní nebo hlavní větev.
- Sloučení: proces kombinování změn z jedné větve (nebo potvrzení) do jiné. To integruje změny z jedné větve do druhé.
- Objekt: jeden ze čtyř typů entit dostupných v úložišti. Mezi tyto entity patří objekty blob představující jednotlivé soubory, strom představující pracovní strom, potvrzení představující konkrétní verzi pracovního stromu a značku *, což je popisek přiřazený k jednotlivým potvrzením.
- Hash: automaticky vygenerovaný jedinečný identifikátor s pevnou délkou, který představuje obsah objektu. Pokaždé, když se tento objekt změní, změní se také hodnota hash. Git tak může určit, který obsah v úložišti se aktualizoval.
- Vzdálené: Odkaz na jiné úložiště (jiné než místní) obvykle odkazuje na instanci hostované službou úložiště. Slouží jako výchozí pro operace odesílání a přijímání.
- Stažení: akce, která načte změny ze vzdáleného úložiště a sloučí je do aktuální větve.
- Push: akce, která odesílá místní potvrzení do vzdáleného úložiště, aktualizuje ho místně provedenými změnami.
- Načtení: akce, která načte změny ze vzdáleného úložiště, aniž by je automaticky slučovala. Toto umožňuje provedení jejich kontroly před použitím sloučení.
- Žádost o přijetí změn: funkce na hostitelských platformách založených na Gitu (například Na GitHubu), která vývojářům umožňuje navrhovat změny a požadovat jejich sloučení do cílové větve.
Git má také rozsáhlou sadu příkazů, které poskytují možnost plně implementovat a spravovat správu verzí prostřednictvím příkazového prostředí, jako je Linux Bash nebo Příkazový řádek Windows. Git můžete také spravovat prostřednictvím desktopových aplikací, jako je GitHub Desktop. Hostitelské platformy založené na Gitu poskytují webové rozhraní, které usnadňuje interakci s úložišti na straně služby.
Git vs. GitHub
Jak je popsáno výše, Git je multi-platformová opensourcová služba DVCS, která usnadňuje spolupráci pomocí místních úložišť, která se dají synchronizovat se vzdálenými úložišti. GitHub je cloudová služba, která poskytuje hostingovou platformu pro úložiště Git. Rozšiřuje celou řadu možností Gitu, a to včetně podpory pro:
- Vzdálená úložiště: usnadnění interakce mezi distribuovanými týmy.
- nástroje pro spolupráci : poskytování funkcí, jako jsou úlohy, diskuze, pull requesty, oznámení, popisky, akce, forky, wiki a projekty.
- Webové rozhraní: minimalizace nutnosti používat příkazy Gitu
- Ochrana větve: vynucování podmínek, které musí být splněny před sloučením (například provedení kontrol pull requestů).