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:
- Soubor
.gitignore - Řešení konfliktů
git mergegit rebase, obzvlášť přepínač--interactivegit restoregit log
Čá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 kategoriidue-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:
-
Stáhněte a rozbalte repozitář hw06a-branches.zip.
-
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.
-
Aplikaci spusťte (
python ./main.py), přidejte několik úloh a ověřte, že vše funguje. -
Přidejte do repozitáře soubor
.gitignore, kterým z Gitu skryjete jak automatický adresář__pycache__, tak soubortasks.json, kam aplikace ukládá úlohy. -
Přidaný
.gitignorecommitněte. -
Zaintegrujte změny z větve
due-datespomocí "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. -
Zaintegrujte změny z větve
categoriespomocí 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-datesa nové změny zcategoriesvložte jako druhé.
- Pokud lze konflikt vyřešit ve více pořadích (např. pořadí akcí v menu), jako první ponechte změny z
-
Nyní proveďte rebase změn z větve
searchnad 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.
-
Nyní se vraťte zpět na větev
maina zaintegrujte změny z větvesearchpomocí klasického merge. Jelikož větev nyní vychází z poslední verzemain, 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). -
Ověřte, že všechny tři přidané funkce i na
mainvě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.
-
Stáhněte a rozbalte repozitář hw06b-history.zip.
-
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.
-
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. -
Autor do Gitu při implementaci synchronizace omylem přidal soubor
credentials.jsons 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.jsonodebrán smažte, jelikož neobsahuje žádné jiné změny.
- Poslední commit, kde je soubor
-
Změny popisu aplikace v souboru
README.mdjsou roztroušené v různých commitech. Spojte všechny změnyREADME.mddo jednoho commitu, ostatní změny ponechte. Vytvořený commit by měl být poslední (tedy ten, na který odkazujeHEAD).- Hint: Nejdříve rozdělte všechny commity upravující
README.mdna jeden, který obsahuje změny v kódu, a druhý, který obsahuje jen změny vREADME.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.
- Hint: Nejdříve rozdělte všechny commity upravující
Výsledný repozitář zabalte do archivu a nahrajte do BRUTE úlohy 06b-git.