# Git

Vores endelige projektrapport er resultatet af en projektmappe fyldt med filer,
som interagerer med hinanden.
Disse filer administrerer vi med Git, som er et versioneringssystem
til at holde styr på forskellige versioner af opgaven
på hver gruppemedlems PC.

Hvert medlem redigerer projektets filer lokalt.
Når de vurderer,
at deres ændringer udgør en helhed som kan beskrives med en kort tekst,
uploader de disse til en central server.
Dette sker oftest gennem en række kommandoer i en terminal.

![Git status](git1.png)

Git status viser filer, som er ændrede siden sidste git pull,
hvor git pull henter filer fra den centrale server til den lokale computer.
Ovenfor ses det, at mappen tools/markdown ikke er tilføjet og klar til commit.
Dette løses med git add:

![Git add og git commit](git2.png)

Efter git add er ændringerne klar til commit.
Efter kommandoen følger -m efterfulgt af en kommentar,
som senere kan ses i historikken over ændringer.

![git push](git3.png)

Efter commit er filerne klar til at blive push'et,
men da filerne på serveren har ændret sig,
opstår en fejl.
For at løse dette kan bruges git pull for at indhente ændringerne på serveren,
inden der pushes.

![git commit, pull og push](git4.png)

For at hente filerne må vi først commite de filer som ellers er ændrede.
Da det vides,
at der kun er en fil som mangler at blive committet,
kan dette gøres med første kommando på ovenstående billede,
hvor -a betyder "alle filer".
Herefter bruge git pull, som henter filerne,
med flaget --rebase,
som løser konflikter ved at stille de lokale ændringer oven på de nye.
Efter pull kan de committede filer pushes til serveren med git push,
hvorefter de lokale ændringer nu også ligger på serveren.
Disse ændringer kan nu hentes af andre gruppemedlemmer med git pull.

Denne fremgangsmåde kan virke uoverskuelig og unødvendigt besværlig,
men processen tager kun omkring et halvt minut efter en smule øvelse.
Fordelen er at alle projektet ændringer nu er synlige med git log
eller programmer som tig, vist nedenfor.

![Git log -p](gitlog.png)

![Tig](tig.png)

