PB071 Principy nízkoúrovňového programování

Merge Request

Tento návod má za cieľ ukázať jednoduchú prácu s Merge Requests. To je nástroj, ktorý sa často používa pri vývoji projektov v manažéroch repozitárov (GitLab, GitHub (tam sa to volá Pull Request)).

Idea je, že vývojár zmenu nenahraje priamo do repozitára, ale pripraví si návrh zmeny v novej vetve. Až je so zmenou spokojný, nahrá svoju novú vetvu do repozitára v GitLabe (alebo GitHube). Potom vytvori Merge Request, ktorým v podstate požiada správcov repozitára, aby jeho zmenu zaradili do svojho projektu.

Postup pre náhrady seminárov

Tento postup platí len pre semináre. Pri vývoji domácich úloh postupujte normálnym spôsobom, ktorý poznáte z prvého cvičenia.
Ak niečo z postupu nie je jasné alebo sa zaseknete, neváhajte sa opýtať nás, svojich cvičiacich.
Radi vám pomôžeme.
1 Začnite z čistého repozitára

Vo svojom repozitári na počítači alebo na Aise napíšte príkaz git status a skontrolujte, že je repozitár čistý a nachádza sa v hlavnej vetve (master, main alebo trunk). Ak tieto názvy nepoznáte, skúste si niekam zapísať, ako sa vaša hlavná vetva volá.

Výstup príkazu by mal vyzerať zhruba takto (dôležité časti sú vyznačené červenou farbou):

aisa$ git status
On branch master        # Alebo main, prípadne trunk.
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
Ak ste v inej vetve, alebo sa Git sťažuje na neuložené zmeny v repozitári, nepokračujte! Vyčistite si najprv repozitár (urobte commity alebo zrušte zmeny), kým budete pokračovať.
2 Vytvorte novú vetvu

V repozitári napíšte príkaz:

aisa$ git checkout -b BRANCH
Switched to a new branch 'BRANCH'

Namiesto BRANCH použite nejaký zmysluplný názov vetvy. Napríklad, ak pracujete na seminári 6, môžete si vetvu nazvať seminar-06.

3 Vypracujte seminár

Stiahnite si kostru seminára do repozitára, rozbaľte ju a vypracujte. Napríklad, pre seminár 6 z príkladu vyššie môžete na Linuxe urobiť:

aisa$ wget https://www.fi.muni.cz/pb071/seminars/seminar-06/pb071-seminar-06.zip
aisa$ unzip pb071-seminar-06.zip
# Vznikne adresár 'seminar-06'.
aisa$ rm pb071-seminar-06.zip
aisa$ cd seminar-06
# Vypracujte cvičenie.
4 Nahrajte zmeny na GitLab

Rovnakým spôsobom, aký sa ukazoval na prvom cvičení, urobte git add … a git commit pre každú zmenu, ktorú ste urobili.

Teraz nahrajte novú verziu na GitLab. Príkaz git push sám nestačí, pretože repozitár na GitLabe vašu novú vetvu nepozná. To však ide ľahko vyriešiť pridaním parametrov:

aisa$ git push origin BRANCH
...
remote: To create a merge request for BRANCH, visit:
remote:   https://gitlab.fi.muni.cz/login/pb071/merge_requests/new?merge_request%5Bsource_branch%5D=BRANCH
...

Vo výstupe príkazu by sa mal objaviť odkaz na vytvorenie Merge Request.
Ak taký odkaz vidíte, otvorte si ho v prehliadači a nasledujúci bod preskočte.

5 Ak ste nedostali vo výstupe príkazu odkaz na vytvorenie Merge Request

Otvorte si repozitár v GitLab FI,

  1. Na ľavom paneli kliknite na Merge Requests.
  2. Kliknite na New Merge Request.
  3. V Source branch vyberte login/pb071 vetva BRANCH, ktorú ste si vytvorili.
  4. V Target branch vyberte login/pb071 vetva master.
  5. Kliknite na Compare Branches and Continue.
6 Nastavte Assignees

Nasledujúca stránka môže vyzerať trochu mätúco, pozrite sa však na obrázok. Najprv si skontrolujte (najvyšší červený rámček), že vyrábate Merge Request z vašej novej vetvy do vetvy master.

Potom v časti Assignees zadajte svojich cvičiacich podľa skupiny:

Skupina 07
xhanicov, xlacko1, xsutor
Skupina 08
xkrchna1, xlacko1, xmarcin

Nakoniec stlačte Submit Merge Request.

7 Vráťte sa do vetvy, v ktorej pracujete na úlohách

Úlohy je možné odovzdávať len z vetiev uvedených v pravidlách predmetu. Preto, kým budete robiť čokoľvek ďalšie, vráťte sa do svojej hlavnej vetvy.

Najprv si znova, ako v bode 1, skontrolujte, že váš repozitár je čistý, príkazom git status. Bez čistého repozitára pre istotu nepokračujte. Potom, príkazom git checkout BRANCH sa prepnite do svojej hlavnej vetvy BRANCH.

Neviete, ktorá to je? Skúste príkaz git branch, ktorý vypíše vetvy vo vašom repozitári. Hlavná vetva sa typicky volá master, ale dá sa zmeniť v nastavení GitLabu na main.

aisa$ git status
# Skontrolujte, že repozitár je čistý, ako v bode 1.

# Ak viete, ako sa volá vaša hlavná vetva, nasledujúci bod môžete preskočiť.
aisa$ git branch
# V zozname nájdite jednu z hlavných vetví; viac než jednu by ste mať nemali.
# Ak sa vám výpis zobrazí tak, že predchádzajúce príkazy zmiznú, a nevidíte príkazový riadok,
# tak sa program pustil v tzv.pager režime, ktorý stačí ukončiť stlačením q.

aisa$ git checkout master
                    
Hotovo

Vďaka tomuto postupu sa dozvieme o tom, že ste cvičenie vypracovali, a môžeme ho skontrolovať.