TDP024 Enterprise Systems
Ht1 2024
# Git: Laboration 1
Versionshantering är idag en väsentlig del av mjukvaruutveckling.
Ett versionshanteringssystem håller koll på alla ändringar som sker i ett projekt; vad som ändrades, vem som ändrade det och när det gjordes.
Det möjliggör även flera personer att arbeta parallellt på ett projekt.
Syftet med den här laborationen är att du ska få lära dig hur man använder versionshanteringssystem, specifikt Git, vilket idag är det mest populära verktyget för versionshantering.
Även om vi använder Git här så kommer kunskapen även vara nyttig i andra versionshanteringssystem.
Nästan alla koncept som gås igenom här är även applicerbara i t.ex. [Mercurial](https://www.mercurial-scm.org).
Laborationen är mycket enklare att genomföra om man är bekväm med grunderna i Git. Därför rekommenderas det att gå igenom en snabb tutorial innan, exempelvis [try.github.io](https://try.github.io/).
**OBS** - Läs igenom hela laborationen innan du börjar.
## Dokumentation
- [https://git-scm.com/doc](https://git-scm.com/doc): Innehåller all information man behöver angående Git.
Det finns även några filmer om man föredrar att ta till sig informationen på så sätt.
- [https://git-scm.com/book/en/v2](https://git-scm.com/book/en/v2): Perfekt om man föredrar information i bokform istället.
Innehållet är i stort sätt samma som länken ovan.
- [http://chris.beams.io/posts/git-commit/](http://chris.beams.io/posts/git-commit/): Bra artikel som går igenom hur man bör skriva commitmeddelanden för att effektivt kommunicera ändringarna och motivationen bakom dem.
- [http://documentup.com/skwp/git-workflows-book](http://documentup.com/skwp/git-workflows-book): Går igenom en populär metod för att arbeta med Git.
- [ http://www.fredonism.com/archive/a-practical-take-on-gitflow-and-semantic-versioning]( http://www.fredonism.com/archive/a-practical-take-on-gitflow-and-semantic-versioning/): Intressant artikel om versionsnumrering.
## Uppgift
Börja med att hämta (git clone) hem labbens "repository" som ligger på git@gitlab.liu.se:large-scale-dev/git-web-server.git.
Detta repository innehåller flera "brancher".
De två huvudsakliga är _master_ och _develop_.
Utöver dessa två finns det även ett antal så kallade "topic brancher".
Bekanta dig med historiken och hur dessa brancher ser ut.
### Basuppgifter
- Till att börja med ska du visa hur man utvecklar en ny funktion.
När man utvecklar en ny funktion är det bra att göra det på en ny branch, för att sedan "merga" den med den ursprungliga.
Det vill säga, sammanfoga den nya branchen med den ursprungliga branchen.
Utgå från develop och implementera en ny funktion (lägg till en rad text i slutet på _README.md_) på detta sätt.
- När du har sammanfogat din ändring ska du få in lite andra uppdateringar i _develop_.
Tanken är att du ska få in de ändringar som är gjorda i grenarna _implement-api_ och _add-tests_.
Börja med att sammanfoga _add-tests_ med develop genom att använda kommandot _merge_.
- Sammanfoga _implement-api_ med _develop_ genom att göra en rebase.
- Committen "Remove important structs" är dum att ha med då den tar sönder koden.
Se till att glömma bort den med hjälp av en reset.
### För högre betyg
För att få ett högre betyg så kräver det att du gör lite extra.
Utöver stegen ovan ska du även göra dessa:
- Efter det ser du att det finns två commits "Add a todo in todo.go" och "Add one more todo in todo.go" som egentligen borde vara en commit.
Fixa detta.
- Det ligger ytterligare ett repo på git@gitlab.liu.se:large-scale-dev/git-lab-remote2.git.
Lägg till det som en ny remote.
- På den nya remoten finns det en commit på branchen implement-api ("Refactor database configuration") som du gärna vill applicera på din develop.
Använd cherry-pick för att åstakomma detta.
### Avslut + redovisning
När ändringarna är klar ska du skapa ett nytt repo på [gitlab.liu.se](gitlab.liu.se) och "pusha" upp dina ändringar där.
Se till att alla ändringar ligger i _master_-branchen innan du gör det.
Uppgiften redovisas genom att ni för en assistent genomför de olika stegen.
Var noga med att förklara vad som händer i varje steg.
Specifikt, förklara skillnaden mellan merge och rebase genom att diskutera hur informationen lagras i git.
Sidansvarig: Anders Fröberg
Senast uppdaterad: 2021-08-23