Josef Růžička image

V praxi je obecně krajně nevýhodné mít pouze lokální zálohy souborů, a proto existuje mnoho služeb, které umožňují vytvářet zálohy na vzdálených serverech, a tím pro majitele rozložit riziko ztráty dat. Ve světě vývoje aplikací je běžným standardem mít kód uložený v tzv. vzdálených repozitářích. Ve spojení s Gitem patří mezi nejznámější poskytovatele těchto služeb např. Github, Bitbucket, GitLab, apod.

Účty jednotlivců jsou na těchto serverech zpravidla vedeny zcela zdarma, a tak vám nic nebrání si jeden takový založit. Proces se podobá založení online emailu.

Pokud máte založený účet na jedné z těchto služeb, můžeme pokračovat dále.

V tuto chvíli vás budou zajímat v zásadě 2 situace:

  • Potřebujete poslat kód z lokálního repozitáře do vzdáleného repozitáře.
  • Potřebujete si do svého počítače natáhnout kód z nějakého vzdáleného repozitáře, a vytvořit si tak ve svém počítači lokální kopii.

Pozn.: Git je tzv. distribuovaný verzovací systém, což v praxi znamená, že defaultně každá kopie repozitáře obsahuje veškerou historii všech revizí. Tato vlastnost je další z mnoha výhod gitu, která výrazně snižuje pravděpodobnost, že o svůj kód můžete přijít.

Tento tutoriál navazuje a předpokládá znalosti z tutoriálu Git - základy. Níže popsané úkony jsou prováděny na příkazové řádce, tzv. CLI.

Cílem je vysvětlit následující:

  1. Vytvoření vzdáleného repozitáře u jednoho z poskytovalelů těchto služeb (Github, Bitbucket, Gitlab, apod).
  2. Přesouvání kódu z lokálního repozitáře do vzdáleného a naopak.

Poslání kódu do vzdáleného repozitáře

Posílat kód do vzdálených repozitářů je možné pouze skrze zabezpečený protokol git, přičemž zabezpečení zajišťuje samostatná technologie ssh. (Pokud tuto technologii nepoužíváte, začněte: ve světě technologií se jedná o běžný standard, bez kterého se dříve či později stejně neobejdete. Přečtení našeho tutoriálu by vám nemělo zabrat více než deset minut).

K funkčnímu zabezpečenému spojení mezi vaším počítačem a vzdáleným repozitářem potřebujete:

  • svůj soukromý a veřejný klíč ve složce ~/.ssh na vašem počítači (linux),
  • svůj veřejný klíč uložený do evidenci přísupových klíčů skrze online administraci poskytovatele vzdáleného repozitáře.

Pokud se držíte tohoto tutoriálu, máte nyní ve složce test svůj lokální repozitář s několika testovacími revizemi (commity). Postup přesunu kódu do vzdáleného repozitáře je nyní následující:

  • Skrze online administraci poskytovatele vytvořte nový repozitář se stejným názvem (test). Po kliknutí na tlačítko uložit budete mít ve vzdáleném repozitáři nový prázdný repozitář a především odkaz na tento repozitář. Odkaz může vypadat např. následovně [email protected]:[username]/test.git.
  • Lokální repozitář napojíte na vzdálený příkazem git remote add origin [email protected]:[username]/test.git.
  • Nyní můžete zkontrolovat, že byl vzálený repozitář napojen na lokální, a to pomocí příkazu git remote -v, který vypíše všechny napojené vzdálené repozitáře.Nyní už zbývá jen poslední krok, a to poslat lokální kód na vzdálený server. To provedete příkazem git push -u origin master. Atribut -u v tomto případě říká, že se má ve vzdáleném repozitáři, tzv. origin, vytvořit větev kódu, která ponese stejné jméno jako lokální větev, tedy master.

Ověřit si, která lokální větev se mapuje na kterou vzdálenou větev, můžete pomocí příkazu git remove show origin. V tomto případě dostanete informaci, že master merges with remote master.

Pozn.: Bližší informace o větvích gitu v následující části tohoto tutoriálu.

Naklonování vzdáleného repozitáře

Naklonování, resp. vytvoření lokální kopie vzdáleného repozitáře provedete jedním příkazem, viz. např. instrukce pro stažení Drupal 8:

git clone --branch 8.4.x https://git.drupal.org/project/drupal.git [název cílove složky]

K příkazu bych rád vysvětlil následující:

Pozn.: Výše uvedený postup je z hlediska instalace Drupalu zcela validní, viz např. Instalace Drupalu skrze Git, nicméně mnohem výhodnější bude pro tento účel použít instalaci Drupalu skrze Composer.

  • --branch 8.4.x. Tento atribut říká, jakou verzi drupalu chceme stáhnout.
  • Protokol http(s). Klonování repozitáře skrze tento protokol je pouze jednosměrná záležitost. V praxi toto znamená, že si budete v čase moci dotahovat nově vydané verze (více viz dále), nicméně vámi upravený kód nebude možné do vzdáleného repozitáře poslat zpět.

Představme si v tuto chvíli, že máte 2 počítače (desktop a laptop) a předpokládejme, že lokální repozitář máte ve svém desktopu a nově také ve vzdáleném repozitáři. Někam cestujete a rádi byste si vzali s sebou laptop a pokračovali v práci na něm.

V této situaci do laptopu jednoduše naklonujete repozitář pomocí příkazu git clone [email protected]:[username]/test.git.

  • Protocol git. Tou zásadní změnou v tomto případě je to, že jste nyní použili protocol git, který vám umožní oboustrannou výměnu dat se vzdáleným repozitářem. Cokoliv, co nyní na svém laptopu uděláte, budete nakonec moci poslat zpět do vzdáleného repozitáře.

Pozn.: Aby vám fungovalo zabezpečené připojení, budete muset také v laptopu nastavit svůj ssh klíč. Zde máte 2 možnosti:

  • Použijete stejné klíče, které již máte v desktopu. Neboli manuálně soubory přesunete z jednoho počítače do druhého.
  • Vytvoříte si v laptopu nové klíče (viz. tutoriál ssh) a v adminstraci poskytovatele vzdáleného repozitáře si v příslušné sekci přidáte svůj nový klíč.

K práci se vzdáleným repozitářem je ještě vhodné zmínit význam souboru .gitignore. Jak název napovídá, soubor obsahuje instrukce, co má git “ignorovat”, tedy vynechat ze sledování. Typickým příkladem pro práci s Drupalem je soubor .htaccess v rootu webu (obvykle se liší pro různá prostředí), soubor settings.php (kromě toho, že se v různých prostředích liší, obsahuje důvěrné údaje, které nechcete sdílet) či složka sites/default/files (např. soubory, které nahráváte na web k testovacímu obsahu, nechcete sdílet se vzdáleným repozitářem).

A to je vše. Nyní umíte používat základní příkazy gitu. Umíte verzovat lokální kód, umíte si lokální verze zálohovat ve vzdáleném repozitáři a umíte kód získávat ze vzdálených repozitářů.