git https://dev.drupal.cz/ cs Drupal oznámil partnerství se službou GitLab https://dev.drupal.cz/clanky/drupal-oznamil-partnerstvi-se-sluzbou-gitlab <span class="field field--name-title field--type-string field--label-hidden">Drupal oznámil partnerství se službou GitLab</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p class="lead">Oznámení je součástí dlouhodobého procesu hledání vylepšení infrastruktury pro všechny Drupal vývojáře. Po přesunu kódu na GitLab se postupně otevřou nové, snažší možnosti pro spolupráci.</p> <p>Minulý rok byl připraven scénář výběru "Drupal Flow" nejvhodnějšího nástroje. Byl zpracován bez ohledu na stávající možnosti/vlastnosti nejznámějších služeb. Scénář byl pak s představitely těchto služeb (GitHub, BitBucket a GitLab) probrán a u každého byly sepsány jeho klady a zápory. Výsledekem zmíněného šetření byl výběr BitBucketu, který jako jediný neměl velké překážky pro integraci.</p> <p>Nicméně, tým GitLabu se obrátil přímo na Drupal Asociaci, s tím, že má zájem uvedené problémy vyřešit. Šanci dostal mj. díky tomu, že  integraci s GitLabem byla více nakloněna i Drupal komunita. GitLab navíc nabídl technickou a finanční podporu pro celý proces migrace a další podpory pro Drupal jako takový.</p> <p>Celá migrace se nyní připravuje a je rozdělena na tři části:</p> <p><strong>1) Nahrazení vlastní Drupal Git infrastruktury GitLabem</strong></p> <p>Některé z nových funckí (jako třeba inline editace kódu) budou v této fázi přístupné jen maintainerům projektů. Jiné (např. lepší zobrazení kódu) budou přístupné všem.</p> <p><strong>2) Zapnutí Merge requestů, Inline editace kódu a review kódu přímo v prohlížeči</strong></p> <p>Merge requesty přinesou známý proces, a tím usnadní práci všem vývojářům. Jednoduché úpravy v kódu (překlepy atp.) bude možné opravit přímo v prostředí prohlížeče. Issues na drupal.org by měly být synchroní s těmi na GitLabu.</p> <p><strong>3) Zhodnocení dalších funkcí</strong></p> <p>Po prvních dvou fázích přijde prostor pro komunitu a její návrhy na přidávání dalších funkcí. Chceme nahradit Drupal CI pomocí GitLab CI?</p> <h2>Již probíhající změny v Git Remote</h2> <p>Ověřování heslem pro Git je zastaralé. Doporučujeme, aby všichni uživatelé začli používat <a href="https://drupal.org/gitauth">ověřování klíčem SSH</a>.</p> <ul><li><strong>Byly změněny vzdálené adresy URL pro push do plných projektů:</strong><br /> Pokud máte vytvořený Git remote ve formátu<br /><code>&lt;username&gt; @ git.drupal.org: project / &lt;yourproject&gt; .git</code><br /> formát by měl být změněn na:<br /><code>[email protected]: project / &lt;yourproject&gt; .git</code></li> <li><strong>HTTPS adresy pro plné projekty zůstavají beze změn.</strong></li> <li><strong>HTTPS adresy a Git remote URL pro sandbox projekty se změnily:</strong><br /> Pro Remote:<br /><code>&lt;username&gt; @ git.drupal.org: sandbox / &lt;username&gt; / &lt;node-id&gt; .git</code><br /> formát by měl být změněn na:<br /><code>[email protected]: sandbox / &lt;username&gt; - &lt;nodeid&gt; .git</code><br /> HTTPS url se budou měnit z:<br /><code>https://git.drupal.org/sandbox/&lt;username&gt;/&lt;nodeid&gt;.git</code><br /> na formát:<br /><code>https://git.drupal.org/sandbox/&lt;username&gt;-&lt;nodeid&gt;.git</code></li> </ul><p><strong>Důležité:</strong> Pokud máte libovolné automatizované systémy, které se autentizují na Git, jako jsou CI Pipelines nebo zrcadlení repozitářů, ujistěte se, že jsou také aktualizovány.</p> <p>Podrobnější informace o těchto změnách, stejně jako instrukce pro změnu Git remote nebo nastavení klíčů SSH, naleznete v těchto pokynech: <a href="https://drupal.org/gitauth">https://drupal.org/gitauth</a></p> <p><a href="https://www.drupal.org/drupalorg/blog/developer-tools-initiative-part-5-gitlab-partnership">Originální článek v angličtině.</a></p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/petr" class="username">petr</a></span> <span class="field field--name-created field--type-created field--label-hidden">Út, 08/21/2018 - 19:02</span> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/stitky/drupal" hreflang="cs">drupal</a></div> <div class="field__item"><a href="/stitky/git" hreflang="cs">git</a></div> <div class="field__item"><a href="/stitky/gitlab" hreflang="cs">gitlab</a></div> </div> <section class="field field--name-field-comments-article field--type-comment field--label-above comment-wrapper"> <h2 class="title comment-form__title">Přidat komentář</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=866&amp;2=field_comments_article&amp;3=comment_article" token="kuC-I2x93No_V94wmtzyRRUQ2HBYr96FwNmcKWw-Feo"></drupal-render-placeholder> </section> Tue, 21 Aug 2018 17:02:17 +0000 petr 866 at https://dev.drupal.cz Git - používání větví https://dev.drupal.cz/navody/git-pouzivani-vetvi <span class="field field--name-title field--type-string field--label-hidden">Git - používání větví</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/pepino710" class="username">pepino710</a></span> <span class="field field--name-created field--type-created field--label-hidden">Ne, 03/04/2018 - 21:40</span> <div class="field field--name-field-paragraphs field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p>Koncept tzv. větví či větvení (anglicky branches) je pro Git naprosto esenciální. Jakmile příkazem git init založíte nový lokální repozitář, Git pro vás na pozadí automaticky vytvoří první větev kódu - master.</p> <p>Koncept větví si můžete jednoduše představit jako strom. Větev master, jakožto první větev, představuje pomyslný kmen a z něj je možné vytvořit neomezené množství větví, a stejně tak z těchto větví je možné vytvořit neomezené množství dalších větví, atd.</p> <p>Každá větev představuje svůj vlastní prostor, ve kterém probíhá verzování kódu. Tzv. odvětvením přebírá nová větev aktuální stav kódu v původní větvi, nicméně další verzování na této větvi je zcela nezávislé na větvi původní.</p> <p>Git umožňuje velmi jednoduše větve vytvářet, přejmenovávat, mazat, ale především umožňuje větve (resp. kód z těchto větví) slučovat. Právě možnost slučování kódu má velké praktické využití.</p> <p>I když web vyvíjí jednotlivec, je velmi bezpečné vyvíjet všechny nové funkce na vlastních větvích a přitom mít v hlavní větvi, masteru, zachovaný funkční kód.<br /> Jakmile pracujete v týmu, je používání větví naprosto nezbytnou záležitostí: jen tak má totiž každý vývojář jistotu, že nepřepisuje kód někomu jinému. V současnosti existuje mnoho <a href="https://www.atlassian.com/git/tutorials/comparing-workflows">metodologií</a> definujících tzv. development workflow, kterými se můžete inspirovat.</p> <p>Na závěr tohoto teoretického úvodu bych ještě rád zmínil, že kód každé větve lze poslat do vzdáleného repozitáře způsobem, jakým to bylo popsáno v <a href="/node/81">předešlé kapitole</a>, nicméně větev stejného názvu nemůže ve vzdáleném repozitáři existovat vícekrát. To znamená, že pokud budou mít dva nebo více vývojářů lokálně stejně pojmenované větve, bude moci do vzáleného repozitáře tzv. pushnout svou lokální větev jen jeden z nich (ostatní si budou muset své lokální větve přejmenovat). Aby k těmto konfliktům nedocházelo, je vhodné definovat si v rámci týmu určitou jmennou konvenci.</p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Syntaxe</h2> <p>Pokud volně navážeme na příklad repozitáře <code>test</code> z <a href="/node/61">první kapitoly</a>, nacházíte se ve stavu, kdy ve výchozí větvi master máte provedených několik commitů. Předpokládejme, že se ve složce projektu (<code>test</code>) se nacházejí verzované soubory <code>a.txt</code>, <code>b.pdf</code>, <code>c.php</code>.</p> <p>Rozhodnete se pokračovat ve vývoji, nicméně tentokrát v nové větvi s názvem <code>devel_css</code>. Novou větev vytvoříte a zároveň se na ni přepnete pomocí příkazu <code>git checkout -b devel_css</code>.<br /> V rámci nové větve přidáte soubory <code>d.css</code> a <code>e.js</code> a provedete commit, a to pomocí příkazů:</p> <pre code="bash"> &gt; d.css e.js git add . git commit -m “Added files d.css and e.js.” </pre> <p>Po provedení commitu jste tedy v nové větvi <code>devel_css</code> o jeden commit napřed oproti původní větvi master. Stav můžete zkontrolovat standardně pomocí příkazů <code>git status a git log -n 5</code>. Přehled všech existujících lokálních větví získáte příkazem <code>git branch</code>. Případně přehled všech vzdálených větví (větve ze vzdáleného repozitáře) příkazem <code>git branch -r</code>. Přehled všech větví, tedy lokálních a vzdálených, získáte příkazem <code>git branch -a</code>.</p> <p>Přepínat se mezi existujícími větvemi můžete jednoduše příkazem <code>git checkout [název větve]</code>. V našem případě se zpět na větev <code>master</code> přepnete pomocí příkazu <code>git checkout master</code>.<br /> Všimněte si, že po přepnutí na větev <code>master</code> se ze složky projektu ztratily soubory <code>d.css</code> a <code>e.js</code>. Je to jednoduše proto, že tyto soubory ve větvi <code>master</code> neexistují.</p> <p>Při přepínání mezi větvemi musí být vaše pracovní složka (working directory) čistá - tedy ve stavu, kdy příkaz git status vrací hlášku <code>nothing to commit, working directory clean</code>.<br /> Pokud jsou v pracovním adresáři modifikované nebo staged soubory, git vám nedovolí se přepnout na jinou větev, dokud na aktivní větvi neprovedete commit. Příkaz <code>git checkout [název existující větve]</code> vám v takovém případě vrátí chybovou hlášku <code>Your local changes to the following files would be overwritten by checkout</code>.</p> <p>V případě nových, dosud neverzovaných souborů (tzv. untracked files) vám ovšem git přepnutí na jinou větev dovolí. Je to tím, že neverzovaný soubor dosud nepatří do žádné větve, a tudíž na něj přepínání větví nemá vliv.</p> <p>Ve větvi <code>master</code> nyní vytvořte další nový soubor s názvem <code>f.yaml</code> a znovu proveďte commit. Tím se dostanete do stavu, kdy je v obou větvích nový commit, avšak v každé větvi jde o úplně jinou věc, resp. jiný kód.</p> <p>Předpokládejme nyní, že jste změnili názor a chcete větev <code>devel_css</code> přejmenovat na <code>devel1</code>. Provedete to jednoduše příkazem <code>git branch -m [původní název větve] [nový název větve]</code>. V našem případě <code>git branch -m devel_css devel1</code>.</p> <p>V zápětí jste ovšem znovu změnili názor a rozhodli se, že ve větvi <code>devel1</code> již pokračovat nebudete. Kód z této větve chcete sloučit do větve <code>master</code>, a následně větev <code>devel1</code> smazat.</p> <p>Pro sloučení kódu je nutné, abyste se nacházeli ve větvi <code>master</code>, což byste nyní měli. Samotné sloučení (merge) kódu provedete příkazem <code>git merge [název slučované větve]</code>. V našem případě tedy příkaze <code>git merge devel1</code>.<br /> Jelikož samotný merge představuje pro Git jen další commit, otevře Git po provedení příkazu v rámci příkazové řádky editor (nano, vim), abyste si mohli upravit tzv. commit message. Zároveň pro vás tuto hlášku předepíše - v tomto případě by hláška měla podobu <code>Merge branch 'devel1' into master</code>. Editaci hlášky ukončíte způsobem standardním pro daný editor. Např. u nano editoru pomocí kláves <code>ctrl-x</code>.<br /> Pokud nyní zkontrolujete složku projektu, měly by se v ní nově nacházet soubory <code>d.css</code> a <code>e.js</code>.</p> <p>Smazání větve <code>devel1</code> provedete příkazem <code>git branch -D devel1</code>.</p> <p>A to je víceméně vše, co o používání větví obecně potřebujete vědět.</p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Konflikty při slučování kódu</h2> <p>Možná vás napadlo, co se stane, když je na každé větvi modifikován stejný soubor, anebo když je v každé větvi přidán soubor stejného jména, ale s jiným obsahem? Vznikne tzv. merge conflict.</p> <p>Jak jsme výše uvedli, sloučení kódu představuje pro Git jen další commit. Git se v této situaci zachová tak, že všechny modifikované či nové soubory, u kterých žádný konflikt není, umístí do stavu staged a konfliktní soubory se pokusí sloučit. Příkaz git status uvádí u konfliktních souborů hlášku “both modified”.</p> <p>Tato situace může zejména pro začátečníka vypadat velmi složitě a nepříjemně, není však důvod k panice. Jednak se časem naučíte konfliktům z vetší části předcházet, zadruhé není tak těžké konflikt vyřešit. Otevřete si konkrétní soubory, do nichž Git na úrovni jednotlivých řádků umístil vlastní značky - ty říkají, jaký kód byl v souboru původně a jaký je nový. V tuto chvíli je tedy na vás, abyste manuálně prošli dokument, zachovali chtěný kód a smazali zastaralý/nechtěný kód. Jakmile jsou úpravy kódu hotovy, provedete zaverzování klasickým způsobem - to příkazy <code>git add .</code> a <code>git commit -m “[commit message]”</code>.</p> <p><em>Pozn.: Pro editaci konfilktních souborů doporučujeme používat software typu IDE, např. PhpStorm, který má podporu pro Git a pomocí formátování textu vám vizuálně napovídá, jaké části kódu je potřeba editovat.</em></p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Přepínání větví a vývoj Drupalu</h2> <p>Jak již zřejmě víte, Drupal není jen kód, ale také databáze. Přepínání mezi větvemi se týká výhradně kódu, přičemž databáze zůstává stejná.</p> <p>Po každém sloučení kódu obsahujícího změny v konfiguraci je tedy důležité updatovat také stav databáze, a to příkazem <code>drush cim -y</code>, který do databáze importuje novou konfiguraci z kódu.</p> <p><em>Pozn.: Výše popsaný Import konfigurace se týká výhradně Drupal 8. V Drupal 7 se pro tyto účely používal modul features.</em></p> <p>Pokud nový kód přidává nové moduly či upravuje strukturu databáze, je třeba provést také update databáze. K tomu slouží příkaz <code>drush updb -y</code>.</p> <p>Pro vývoj na určité větvi může být vhodné vytvořit si duplikát databáze. Jedná se zpravidla o situace, kdy vývojář potřebuje více experimentovat či měnit konfiguraci na různých místech a zároveň chce mít jistotu, že neovlivní stávající funkční konfiguraci. V tomto případě nezapomeňte manuálně upravit údaje pro připojení k databázi v konfiguračním souboru <code>settings.php</code>.</p> </div> </div> </div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/stitky/git" hreflang="cs">git</a></div> <div class="field__item"><a href="/stitky/pro-zacatecniky" hreflang="cs">pro začátečníky</a></div> </div> </div> <div class="field field--name-field-teaser-image field--type-entity-reference field--label-above"> <div class="field__label">Teaser image</div> <div class="field__item"><a href="/media/31" hreflang="cs">Git branches</a></div> </div> Sun, 04 Mar 2018 20:40:18 +0000 pepino710 236 at https://dev.drupal.cz Git - používání vzdálených repozitářů https://dev.drupal.cz/navody/git-pouzivani-vzdalenych-repozitaru <span class="field field--name-title field--type-string field--label-hidden">Git - používání vzdálených repozitářů</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/pepino710" class="username">pepino710</a></span> <span class="field field--name-created field--type-created field--label-hidden">Út, 02/27/2018 - 06:42</span> <div class="field field--name-field-paragraphs field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p>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ř. <a href="https://github.com/">Github</a>, <a href="https://bitbucket.org/">Bitbucket</a>, <a href="https://about.gitlab.com/">GitLab</a>, apod.</p> <p>Úč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.</p> <p>Pokud máte založený účet na jedné z těchto služeb, můžeme pokračovat dále.</p> <p>V tuto chvíli vás budou zajímat v zásadě 2 situace:</p> <ul><li>Potřebujete poslat kód z lokálního repozitáře do vzdáleného repozitáře.</li> <li>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.</li> </ul><p><em>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.</em></p> <p>Tento tutoriál navazuje a předpokládá znalosti z tutoriálu <a href="/node/61">Git - základy</a>. Níže popsané úkony jsou prováděny na<a href="https://en.wikipedia.org/wiki/Command-line_interface"> příkazové řádce, tzv. CLI</a>.</p> <p>Cílem je vysvětlit následující:</p> <ol><li><a href="#1">Vytvoření vzdáleného repozitáře u jednoho z poskytovalelů těchto služeb (Github, Bitbucket, Gitlab, apod).</a></li> <li><a href="#2">Přesouvání kódu z lokálního repozitáře do vzdáleného a naopak.</a></li> </ol></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2 id="1">Poslání kódu do vzdáleného repozitáře</h2> <p>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 <a href="https://en.wikipedia.org/wiki/Secure_Shell">ssh</a>. (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).</p> <p>K funkčnímu zabezpečenému spojení mezi vaším počítačem a vzdáleným repozitářem potřebujete:</p> <ul><li>svůj soukromý a veřejný klíč ve složce <code>~/.ssh</code> na vašem počítači (linux),</li> <li>svůj veřejný klíč uložený do evidenci přísupových klíčů skrze online administraci poskytovatele vzdáleného repozitáře.</li> </ul><p>Pokud se držíte tohoto tutoriálu, máte nyní ve složce <code>test</code> 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í:</p> <ul><li>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ě <code>[email protected]:[username]/test.git</code>.</li> <li>Lokální repozitář napojíte na vzdálený příkazem <code>git remote add origin [email protected]:[username]/test.git</code>.</li> <li>Nyní můžete zkontrolovat, že byl vzálený repozitář napojen na lokální, a to pomocí příkazu <code>git remote -v</code>, 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 <code>git push -u origin master</code>. Atribut <code>-u</code> v tomto případě říká, že se má ve vzdáleném repozitáři, tzv. <code>origin</code>, vytvořit větev kódu, která ponese stejné jméno jako lokální větev, tedy <code>master</code>.</li> </ul><p>Ověřit si, která lokální větev se mapuje na kterou vzdálenou větev, můžete pomocí příkazu <code>git remove show origin</code>. V tomto případě dostanete informaci, že <code>master merges with remote master</code>.</p> <p><em>Pozn.: Bližší informace o větvích gitu v následující části tohoto tutoriálu.</em></p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2 id="2">Naklonování vzdáleného repozitáře</h2> <p>Naklonování, resp. vytvoření lokální kopie vzdáleného repozitáře provedete jedním příkazem, viz. např. <a href="https://www.drupal.org/project/drupal/git-instructions">instrukce pro stažení Drupal 8</a>:</p> <pre code="bash"> git clone --branch 8.4.x https://git.drupal.org/project/drupal.git [název cílove složky]</pre> <p>K příkazu bych rád vysvětlil následující:</p> <p><em>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.</em></p> <ul><li><code>--branch 8.4.x</code>. Tento atribut říká, jakou verzi drupalu chceme stáhnout.</li> <li><strong>Protokol http(s)</strong>. 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.</li> </ul><p>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.</p> <p>V této situaci do laptopu jednoduše naklonujete repozitář pomocí příkazu <code>git clone [email protected]:[username]/test.git</code>.</p> <ul><li><strong>Protocol git</strong>. 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.</li> </ul><p><em>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:</em></p> <ul><li><em>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.</em></li> <li><em>Vytvoříte si v laptopu nové klíče (viz. <a href="/node/86">tutoriál ssh</a>) a v adminstraci poskytovatele vzdáleného repozitáře si v příslušné sekci přidáte svůj nový klíč.</em></li> </ul><p>K práci se vzdáleným repozitářem je ještě vhodné zmínit význam souboru <code>.gitignore</code>. 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 <code>.htaccess</code> v rootu webu (obvykle se liší pro různá prostředí), soubor <code>settings.php</code> (kromě toho, že se v různých prostředích liší, obsahuje důvěrné údaje, které nechcete sdílet) či složka <code>sites/default/files</code> (např. soubory, které nahráváte na web k testovacímu obsahu, nechcete sdílet se vzdáleným repozitářem).</p> <p>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ářů.</p> </div> </div> </div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/stitky/git" hreflang="cs">git</a></div> <div class="field__item"><a href="/stitky/pro-zacatecniky" hreflang="cs">pro začátečníky</a></div> </div> </div> <div class="field field--name-field-teaser-image field--type-entity-reference field--label-above"> <div class="field__label">Teaser image</div> <div class="field__item"><a href="/media/241" hreflang="cs">Remote Git repositories</a></div> </div> Tue, 27 Feb 2018 05:42:29 +0000 pepino710 81 at https://dev.drupal.cz Git - základy https://dev.drupal.cz/navody/git-zaklady <span class="field field--name-title field--type-string field--label-hidden">Git - základy</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/pepino710" class="username">pepino710</a></span> <span class="field field--name-created field--type-created field--label-hidden">Čt, 02/22/2018 - 06:21</span> <div class="field field--name-field-paragraphs field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p><a href="https://cs.wikipedia.org/wiki/Git">Git</a> je v součastnosti jedním z nejpopulárnějších nástrojů na zálohování a verzování kódu. Pro vývojáře je tento nástroj naprosto nepostradatelný. Rozhodně však dlouhodobě ušetří spoustu času a starostí i lidem z řad hobbistů, kterých je v každé komunitě mnoho.</p> <p>Neumíte si představit, k čemu přesně je Git dobrý?</p> <ul><li>Při vývoji je zcela běžnou praxí, že experimentujete. Píšete vlastní kód, upravujete kód někoho jiného, instalujete a konfigurujete různé moduly, zkrátka hrajete si se systémem, a tím ho poznáváte. Proto je zároveň běžnou praxí, že něco rozbijete, což ovšem není problém, pokud se jednoduše, např. jedním příkazem na příkazové řádce, dokážete vrátit zpět do stavu, kdy bylo vše funkční.</li> <li>Máte více počítačů, např. desktop a laptop, a potřebujete nástroj, pomocí něhož budete moci aktuální verzi systému přesunout z jednoho na druhý a naopak. To, co určitě nechcete, je kopírovat soubory manuálně.</li> <li>Jakmile něco na svém lokálním serveru vytvoříte, potřebujete zpravidla svou aplikaci přesunout na jiný server, odkud bude dostupná online. Někdy také můžete potřebovat pomoc či konzultaci od jiného vývojáře a budete chtít jednoduše přesunout kód/web do jeho počítače.</li> <li>Na vývoji jedné aplikace v praxi většinou pracuje více vývojářů. Pracují na svých počítačích, a následně potřebují kód, který každý z nich vytvořil, sloučit či spojit dohromady.</li> </ul><p>To bylo jen pár základních situací, kdy velmi oceníte verzovací systém. Pro začátek vám bude stačit několik základních dovedností, které vám výrazně usnadní a zpříjemní život. Časem zjistíte, že Git je mocný nástroj, který toho umí mnohem a mnohem více.</p> <p>Git se ovládá buď v terminálu přes příkazovou řádku, anebo je možné využít některou z dostupných aplikací - <a href="https://www.syntevo.com/smartgit/">SmartGit</a>, <a href="https://tortoisegit.org/">TortoiseGit</a>, <a href="https://www.sourcetreeapp.com/">SourceTree</a>, apod.</p> <p>V tomto tutoriálu budeme instalovat o ovládat git skrze příkazovou řádku, neboli <a href="https://en.wikipedia.org/wiki/Command-line_interface">CLI (Command Line Interface)</a>.</p> <p>Naším cílem bude vysvělit si následující:</p> <ol><li><a href="#1">Instalaci Gitu.</a></li> <li><a href="#2">Vytvoření lokálního repozitáře.</a></li> <li><a href="#3">Verzování, resp. vytváření zálohy kódu.</a></li> </ol><p> </p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-tabs paragraph--view-mode--default" id="tabs-361" role="tablist"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2 id="1">Instalace Gitu</h2> </div> <ul class="tab" role="tablist"> <li role="presentation"><a class="tablink active" href="#" data-tab-id="tab-tabs-361-0" aria-controls="Linux (debian-based)" role="tab">Linux (debian-based)</a></li> <li role="presentation"><a class="tablink " href="#" data-tab-id="tab-tabs-361-1" aria-controls="Liniux (RPM-based)" role="tab">Liniux (RPM-based)</a></li> <li role="presentation"><a class="tablink " href="#" data-tab-id="tab-tabs-361-2" aria-controls="Apple" role="tab">Apple</a></li> <li role="presentation"><a class="tablink " href="#" data-tab-id="tab-tabs-361-3" aria-controls="Windows" role="tab">Windows</a></li> </ul> <div class="tab-content"> <div role="tabpanel" class="tab-pane active" id="tab-tabs-361-0"> <div class="paragraph paragraph--type--dcz-para-tab paragraph--view-mode--default"> <div class="tab-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p>Git nainstalujete jednoduše následujícími příkazy:</p> <ul><li><code>sudo apt-get update</code></li> <li><code>sudo apt-get install git-all</code></li> </ul><p>Pokud nyní napíšete v příkazové řádce <code>git</code>, měly by se vám vypsat příkazy, které je možné použít.</p> </div> </div> </div> </div> <div role="tabpanel" class="tab-pane" id="tab-tabs-361-1"> <div class="paragraph paragraph--type--dcz-para-tab paragraph--view-mode--default"> <div class="tab-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p>Víte, jak nainstalovat Git na rpm-based linux distribuci? Přispějte do komunity a pomožte těm, kteří by rádi věděli, jak na to.</p> <p>Pokud potřebujete přístupy do adminstrace webu, obraťte se na někoho z <a href="/node/201#drupal-team">Drupal týmu.</a></p> </div> </div> </div> </div> <div role="tabpanel" class="tab-pane" id="tab-tabs-361-2"> <div class="paragraph paragraph--type--dcz-para-tab paragraph--view-mode--default"> <div class="tab-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p>Víte, jak nainstalovat Git na počítačích Apple? Přispějte do komunity a pomožte těm, kteří by rádi věděli, jak na to.</p> <p>Pokud potřebujete přístupy do adminstrace webu, obraťte se na někoho z <a href="/node/201#drupal-team">Drupal týmu.</a></p> </div> </div> </div> </div> <div role="tabpanel" class="tab-pane" id="tab-tabs-361-3"> <div class="paragraph paragraph--type--dcz-para-tab paragraph--view-mode--default"> <div class="tab-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p>Víte, jak nainstalovat Git na počítačích s operačním systémem Windows? Přispějte do komunity a pomožte těm, kteří by rádi věděli, jak na to.</p> <p>Pokud potřebujete přístupy do adminstrace webu, obraťte se na někoho z <a href="/node/201#drupal-team">Drupal týmu.</a></p> </div> </div> </div> </div> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2 id="2">Vytvoření lokálního repozitáře</h2> <p>Přestože Git je zpravidla používán vývojáři, jedná se o obecný nástroj na verzování souborů.</p> <p>Představte si, že máte v počítači adresář s názvem <code>test</code> a uvnitř něho soubory <code>a.txt</code>, <code>b.pdf</code> a <code>c.php</code>. Pokud chcete složku verzovat pomocí gitu, stačí se do ní přesunout a založit git repozitář. To provedete pomocí příkazů:</p> <ul><li><code>cd [cesta-k-adresari]/test</code></li> <li><code>git init</code></li> </ul><p>A to je vše. Co se stalo?</p> <ul><li>Uvnitř složky <code>test</code> se nyní nachází skrytá složka <code>.git</code>, do které si Git uložil základní informace o právě vytvořeném repozitáři.</li> <li>Složku <code>test</code> je možné kopírovat či přesouvat a dokud bude ve složce existovat podsložka <code>.git</code>, bude repozitář stále aktivní.</li> <li>Smazat git repozitář můžete jednoduše tak, že složku <code>.git</code> smažete.</li> </ul><p>Vhodným druhým krokem po instalaci gitu je ještě nastavení informace o sobě samém (tzv. git credentials). Konkrétně jde o konfiguraci emailu a jména. Bez tohoto nastavení vám git nedovolí verzovat, viz dále.</p> <p><em>Pozn.: Nutno podotknout, že pokud git pouze zkoušíte, nemusí být email ani jméno skutečné.</em></p> <p>Git credentials je možné nastavit jak globálně pro všechny projekty, tak lokálně pro každý jednotlivý projekt zvlášť. Příkazy uvádím pro globální nastavení, nicméně pro lokální se místo atributu <code>--global</code> pouze použijte attribut <code>--local</code>:</p> <ul><li><code>git config --list</code>. Příkaz vypíše aktuální konfiguraci gitu pro daný repozitář.</li> <li><code>git config --global user.name “[jméno příjmení]”</code></li> <li><code>git config --global user.email "[email]"</code></li> </ul></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2 id="3">Verzování pomocí Gitu</h2> <p>Nyní máte existující repozitář, ale ten je prozatím prázdný. Jak tedy začít soubory verzovat?</p> <p>Základním příkazem gitu je <code>git status</code>, který vypíše stav repozitáře. (Jednou z velkých výhod gitu je, že vám vypisuje nápovědu přímo do terminálu, takže často stačí pouze následovat nápovědu.)</p> <p>Po založení nového repozitáře jsou všechny soubory ve složce považovány gitem za tzv. untracked files, neboli nesledované soubory. V praxi to znamená, že git o těchto souborech sice ví, ale neverzuje je.</p> <p>Pokud chceme začít soubory verzovat, zařadíme je mezi sledované příkazem:</p> <ul><li><code>git add [název souboru]</code>. Pro soubory v podsložkách je nutné uvádět relativní cestu.</li> </ul><p>Existují situace, kdy chcete přidat mezi sledované všechny soubory ve složce. K tomu slouží příkaz <code>git add .</code> (tečka zde reprezentuje všechny soubory).</p> <p>Zaverzování samotné pak probíhá pomocí příkazu <code>git commit -m “[commit message]”</code>. Provedení tzv. commitu uloží novou revizi kódu a příkaz <code>git status</code> vrací hlášku “nothing to commit”.</p> <p>Přehled revizí je možné v terminálu vypsat pomocí příkazu <code>git log -n [počet commitů zpět]</code>, např. 5 vypíše 5 posledních revizí.</p> <p>Poslední z běžných úkonů , o kterém se chci zmínit, je mazání souborů. Pokud je soubor verzován a fyzicky ho smažete, začne vám to git hlásit. K odebrání souboru z verzování slouží příkaz <code>git rm [název-souboru]</code>. Tímto příkazem soubor fyzicky nemažete z file systému, ale v rámci gitu ho dáváte do stavu staged. Po následném commitu dojde k jeho odstranění z verzování a soubor se po příkazu <code>git status</code> bude vypisovat mezi nesledovanými soubory. Odstranění souboru z gitu tedy nemaže soubor z file systému.</p> <p>Pokud je pro vás git nový, vyzval bych vás v tomto bodě k tomu, abyste si s ním trochu pohráli. Pokud máte založený testovací repozitář, zkuste si udělat několik dalších testovacích commitů, např.</p> <ul><li>přidat do složky nové soubory a zaverzovat,</li> <li>změnit existující a zaverzovat,</li> <li>přidat soubor do stavu staged a následně ho modifikovat,</li> <li>odebrat soubor ze stavu staged zpět do stavu not staged,</li> <li>verzovaný soubor smazat z file systému a (za pomoci nápovědy) vyřešit konflikt, který tím v gitu vznikne.</li> </ul><p>Po každé akci používejte <code>git status</code>, a tím si kontrolujte, jak git reaguje na vaše jednotlivé akce.</p> </div> </div> </div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/stitky/git" hreflang="cs">git</a></div> <div class="field__item"><a href="/stitky/pro-zacatecniky" hreflang="cs">pro začátečníky</a></div> </div> </div> <div class="field field--name-field-teaser-image field--type-entity-reference field--label-above"> <div class="field__label">Teaser image</div> <div class="field__item"><a href="/media/31" hreflang="cs">Git branches</a></div> </div> Thu, 22 Feb 2018 05:21:52 +0000 pepino710 61 at https://dev.drupal.cz