6. Git

Git

Evaluace v BRUTE již funguje pro obě části. Pokud si v průběhu řešení chcete ověřit, že dosavadní kroky máte správně, můžete nahrát i částečné řešení.

Tato úloha má dvě části, v obou dostanete k dispozici Git repozitář existujícího projektu a vaším úkolem bude repozitář upravit podle kroků v zadání. Následně upravený repozitář zabalený v archivu nahrajte do BRUTE, kde zkontrolujeme obsah jednotlivých commitů. Body získáte za splnění jednotlivých kroků v zadání, můžete tedy odevzdat i nekompletní řešení, za který dostanete odpovídající počet bodů.

Následujte prosím instrukce přesně v pořadí, jak jsou napsané, záleží jak na pořadí commitů, tak na jejich metadatech a obsahu. Popis vámi přidávaných commitů není důležitý, neměňte ale prosím při úpravách popis již existujících commitů.

Relevantní dokumentace:

Část A: Práce s větvemi

První repozitář, se kterým budete pracovat obsahuje implementaci jednoduché terminálové aplikace pro správu úkolů (tzv. TODO list). Mimo větve main jsou v repozitáři 3 další větve, které implementují různé nové funkce:

  • categories: možnost u každé úlohy nastavit kategorii
  • due-dates: možnost nastavit u každé úlohy deadline, u zpožděných úloh se pak ukazuje upozornění
  • search: možnost vyhledávat v popisu a metadatech úlohy

Vaším úkolem bude postupně zaintegrovat všechny změny do větve main:

  1. Stáhněte a rozbalte repozitář hw06a-branches.zip.

  2. Ověřte, že máte v Gitu správně nastavený váš školní e-mail (git config --global user.email) – pokud váš e-mail nebude sedět, automatická evaluace vaše commity odmítne.

  3. Aplikaci spusťte (python ./main.py), přidejte několik úloh a ověřte, že vše funguje.

  4. Přidejte do repozitáře soubor .gitignore, kterým z Gitu skryjete jak automatický adresář __pycache__, tak soubor tasks.json, kam aplikace ukládá úlohy.

  5. Přidaný .gitignore commitněte.

  6. Zaintegrujte změny z větve due-dates pomocí "squash" merge. Nemělo by dojít ke konfliktům. Výsledkem by měl být 1 obyčejný commit obsahující všechny změny z větve.

  7. Zaintegrujte změny z větve categories pomocí obyčejného merge (tedy vytvořením merge commitu se dvěma rodiči). Zde budete muset vyřešit několik konfliktů vhodným způsobem, abyste zachovali obě funkcionality.

    • Pokud lze konflikt vyřešit ve více pořadích (např. pořadí akcí v menu), jako první ponechte změny z due-dates a nové změny z categories vložte jako druhé.
  8. Nyní proveďte rebase změn z větve search nad aktuální větví main, během rebase vyřešte případné konflikty.

    • Hint: Musíte se nejdříve přepnout na větev, kterou chcete rebasovat.
    • Hint: Konflikty je třeba řešit pro jednotlivé commity, může se stát, že po vyřešení konfliktů v jednom commitu dostanete konflikt v dalším commitu.
    • Zachovejte všechny commity ve větvi search.
    • Akce "Search tasks" by měla mít číslo 3, posuňte číslování akcí z prvních dvou větví.
    • I ve výsledcích vyhledávání by se měly úlohy zobrazovat po kategoriích.
  9. Nyní se vraťte zpět na větev main a zaintegrujte změny z větve search pomocí klasického merge. Jelikož větev nyní vychází z poslední verze main, mělo by dojít k tzv. fast-forward, tedy se nevytvoří merge commit (můžete zajistit předáním přepínače --ff-only).

  10. Ověřte, že všechny tři přidané funkce i na main větvi korektně fungují.

Výsledný repozitář zabalte do archivu a nahrajte do BRUTE úlohy 06a-git.

Část B: Úpravy historie

Druhý repozitář obsahuje podobnou aplikaci, tentokrát ale pouze větev main se sérií commitů. Tato část simuluje situaci kdy nějakou dobu pracujete na několika změnách, a ty nyní chcete pročistit před přidáním do hlavního repozitáře.

  1. Stáhněte a rozbalte repozitář hw06b-history.zip.

  2. Ověřte, že máte v Gitu správně nastavený váš školní e-mail – pokud váš e-mail nebude sedět, automatická evaluace vaše commity odmítne.

  3. V posledním commitu autor omylem přidal testovací výpisy v souboru storage.py. Odstraňte z commitu všechny změny ve zmíněném souboru, změny v ostatních souborech ponechte. Výsledkem by neměl být nový commit, jen úprava existujícího.

  4. Autor do Gitu při implementaci synchronizace omylem přidal soubor credentials.json s tajným API klíčem, který následně o několik commitů později odebral. V historii lze ale pořád klíč dohledat. Smažte z historie všechny úpravy tohoto souboru, všechny ostatní změny v upravovaných commitech ponechte.

    • Poslední commit, kde je soubor credentials.json odebrán smažte, jelikož neobsahuje žádné jiné změny.
  5. Změny popisu aplikace v souboru README.md jsou roztroušené v různých commitech. Spojte všechny změny README.md do jednoho commitu, ostatní změny ponechte. Vytvořený commit by měl být poslední (tedy ten, na který odkazuje HEAD).

    • Hint: Nejdříve rozdělte všechny commity upravující README.md na jeden, který obsahuje změny v kódu, a druhý, který obsahuje jen změny v README.md. Následně tyto commity spojte a přesuňte na konec seznamu.
    • Výsledkem by mělo být, že existuje jen jeden commit, který vytvoří a přidá obsah do README.md.

Výsledný repozitář zabalte do archivu a nahrajte do BRUTE úlohy 06b-git.