Hva er Git
Git er et verktøy for versjonskontroll og kodedeling. Det vil blant annet si at du kan lagre hele historikken til hvordan kode har utviklet seg, og gå tilbake til hvilket som helst commit-punkt! Det innebærer også at du kan lage flere versjoner av et program for publisering. Det gjør det også mye lettere for flere å samarbeide om den samme koden. Git er i stand til å løse mange konflikter som kommer av forskjellig kode på forskjellige maskiner. De gangene Git ikke klarer det må det gjøres manuelt. Det finnes programmer som kan hjelpe til med dette, blant annet kan plugins til Eclipse eller IntelliJ IDEA hjelpe dere. Men det er ikke farlig å prøve seg fram, på egen hånd. Bare vær litt forsiktig og test koden før dere committer så dere ikke ødelegger jobben til andre.
Vi bruker Git for å dele eksempelkode, og alt vi skriver skal dere kunne finne under GitHub kontoen vår. Eksemplene ligger i Examples prosjektet.
GitHub
GitHub er en tjeneste som tilbyr Git versjonskontroll. I dette kurset har vi valgt å dele koden vi skriver med dere der. Dere må ikke skaffe dere konto for å få tilgang da vi kjører koden open source, men vi anbefaler det sterkt. Koden vår ligger som sagt i avsnittet over på GitHub kontoen vår.
Hvordan få Git
Den enkleste måten å skaffe seg Git på er å navigere seg til GitHub sine sider, og klikk på "Downlaod GitHub for Windows", eller hvis du har Mac, klikk på "GitHub on Mac", og last ned derfra.
Alternativt kan du gå til Git sine nedlastingssider og skaffe en Git klient derfra. Jeg som skriver dette har aldri brukt GitHub sin klient, kun bash versjonen fra Git. Jeg antar det er enklere å bruke GitHub sin versjon siden den har grafisk grensesnitt, men jeg kommer bare til å forklare basisen for Git Bash. Grensesnittet du kan laste ned fra GitHub sine sider ser veldig rett fram ut, og jeg antar du klarer å lære det like raskt som jeg ville lært det.
GitHub konto
Oppretter du en GitHub konto anbefales det at du bruker (BRUKERNAVN)@stud.ntnu.no adressen din når du registrerer deg på GitHub. Etter du har gjort vanlig registrering kan du søke om å få studentkonto, noe som gjør at du kan få 5 private repoer helt gratis.
For å få studentkonto, gå til GitHub Education, og trykk på "Request a discount". Følg instruksjonene som kommer opp, og alt skal gå i orden. Den gangen jeg gjorde det måtte jeg vente noe sånt som en dag før jeg fikk studentkonto. Det ser ut som det er kommet oppgraderinger siden da, kanskje skjer det umiddelbart nå.
Vi har også GitHub konto. Følg med på denne for kodeoppdateringer i løpet av kurset!
Rask intro til Git Bash
Hentet du klienten fra Git sine nedlastingssider og fulgte installasjonsveiledningen der, har du Git Bash installert allerede. På Windows 7 legger det seg automatisk en snarvei på startmenyen, under Git -> Git Bash. Åpne denne.
Unix/Linux kommandoer
Har du åpent Git Bash, skal du nå ha fram et konsoll vindu. Standard startlokasjon er i brukermappen din. Git Bash bruker normalt unix (linux) kommandoer for å navigere. Noen basiskommandoer er her, søk gjerne på nett for å få vite mer om dem eller finn fler:
Kommando | Handling |
---|---|
cd | skriv "cd MAPPENAVN" for å skifte mappe du står i. ".." som mappenavn går ett nivå opp. Tab er veldig kjekk som autofullfør. Har du flere mapper som starter på det samme, og klikker Tab to ganger, får du opp en liste over alle mappe/filnavn som starter på de innskrevne bokstavene. Dette trikset funker på det meste. |
ls | skriv "ls" for å få opp alle filer og mapper som er i den mappa du står i nå. "ls -la" gir deg mer informasjon om de forskjellige filene/mappene |
mkdir | skriv "mkdir MAPPENAVN" for å lage en ny mappe med navn MAPPENAVN. Fungerer som md i ms dos/ Windows konsollen. |
mv | skriv "mv FILNAVN NYTTFILNAVN" for å flytte en fil. Her kan både filnavn og nytt filnavn være en absolutt eller relativ sti. Du kan også bruke denne kommandoen til å endre filnavn. |
rm | skriv "rm FILNAVN" for å slette en fil. For å slette en mappe må du legge til noen kommandoer som "rm -rf MAPPENAVN". Dette vil slette mappa og alle undermapper og filer. Bruk med forsiktighet. |
Og nå går vi over til grunnleggende Git.
Grunnleggende (pluss litt til) Git kommandoer
Dette er ment som en veldig rask intro til Git Bash. Det er på ingen som helst måte en komplett tutorial eller liste over kommandoer. Er det noe du lurer på som ikke er svart her, er søkemotorer og stack overflow gode venner for å finne svar.
For å hente, eller klone, et repo fra Git, gå naviger deg til hvor du har lyst til at repoet skal ligge. Skriv så:
"git clone https://github.com/IDI-PLab/Examples.git" for å få all eksempelkoden fra dette kurset. Dette vil automatisk legge seg i ei mappe som heter Examples. Vil du at den mappa skal hete noe annet, skriv heller "git clone https://github.com/IDI-PLab/Examples.git DITTMAPPENAVN". Vent til operasjonen er ferdig, og gå gjennom de eksemplene du vil se på.
Måten du generelt arbeider på er
- Skriv kode
- Legge til endringene dine
- Committe endringene du har gjort
- Pulle endringene andre har gjort fra server
- Pushe endringene du har gjort til server
Hvordan de 4 siste punktene fungerer er det vi beskriver her
Hvis du gjør kodeendringer, er det viktig å laste opp det du har gjort. Det gjøres ved først å kjøre "add" kommandoen, så "commit" kommandoen og til slutt "push" kommandoen.
Samarbeider du med andre, så husk LAST ALDRI OPP KODE SOM IKKE KJØRER TIL MASTER! Du kan lage en ny grein om du må, men ikke kjør det på master. Det er veldig irriterende for de du samarbeider med å feilsøke i din kode.
En rask oversikt over de mest grunnleggende kommandoene er under:
Kommando | Handling |
---|---|
git clone | Kloner reposotoriet du henter fra. |
git pull | Henter nyeste versjon av det repoet du befinner deg i. Kan hente fra forskjellige kilder (veldig avansert) eller en gitt gren. "git pull LOKASJON GREN" henter den gitte grenen fra den gitte lokasjonen. Standard lokasjonsnavn er "origin". For eksempel henter "git pull origin master" den nyeste versjonen av master grena. |
git push | Laster opp nyeste committa versjon du har av det repoet du befinner deg i. Kan laste til forskjellige kilder (veldig avansert) eller en gitt gren. "git push LOKASJON GREN" laster opp den gitte grenen fra den gitte lokasjonen. Standard lokasjonsnavn er "origin". For eksempel laster "git push origin master" opp den nyeste versjonen av master grena. |
git status | Viser statusen på repoet du befinner deg i. Viser hvilke filer som er endra, hvilke filer som er nye og hvilke endra/nye filer som allerede er lagt til. |
git add | Legger til filer, nye eller endra, som du vil laste opp til repoet. De må committes før de kan lastes opp. Filer/filtyper som er definert i .gitignore vil ikke bli med på lasset. En snarvei for å legge til alle nye/endra filer er "git add .". |
git commit | Før du kan laste opp de nyeste filene må de committes. Når du har lagt til de filene du vil ha med på en commit med "git add", må du kjøre kommandoen "git commit". Skriver du den så enkelt får du opp en teksteditor for å skrive commit notat i (se vim for beskrivelse under). Noterer du ikke noe, vil commiten bli avbrutt. Kommenter alltid hva du har gjort, det gjør det mye enklere å feilsøke i kode etterpå! Har du en veldig kort beskjed som du vil ha lagt til, kan du bruke "git commit -m "KOMMENTAR"" (kommentaren må være innhyllet i " tegnet). Da slipper du å kjøre teksteditoren. |
git branch | Lager en ny grein. "git branch GRENNAVN" lager ei grein med navn GRENNAVN lokalt. Den må committes og pushes før andre kan se den. |
git merge | Laster alle endringer fra ei grein inn til den greina du står i. Gitt at du befinner deg på master, vil "git merge GRENNAVN" hente alle endringer som er gjort i greina GRENNAVN inn i master greina. Her kan det oppstå konflikter. Isåfall må du løse opp i alle disse, og kjøre commit manuelt. Etter en merge er gjort, må du pushe det til repoet på serveren for at den skal være synlig for andre. |
git checkout | Skifter grein du står på. "git checkout GRENNAVN" skifter grein til GRENNAVN, og all kode og andre filer som er lagt til skifter innhold til det som er lagra i denne greina. |
Samarbeider du med andre, kan det være lurt å sjekke ut kommandoene som starter med "git stash". Da kan du først stashe vekk de endringene du har gjort, pulle de endringene andre har gjort, og så poppe tilbake endringene du gjorde før du committer. Dette vil hjelpe deg på den måten at flere endringer kan auto merges.
Vim
Standard teksteditor for Git Bash er vanligvis vim. Den er litt vanskelig å bruke de første gangene, men hvis du lærer den er den bra. Søk gjerne på nettet etter ressurser for å lære mer om den om du har lyst. Det mest basic (det som trengs for å skrive et commit notat) dekkes her.
Du starter i standardmodus. Her kan du ikke skrive noe tekst. Denne brukes for navigering, kopiering av tekst, lagring og avslutte. Vi vil bare dekke lagring og avslutning her.
For å kunne skrive, trykk 'i' (for "insert"). Du kan nå skrive så mye tekst du vil. I en commitbeskjed, kan ikke den første linja (overskrifta) være lengre enn 50 tegn! Under overskrifta må du også ha ei tom linje. Dette er spesielt for Git, og måten det behandler commit beskjeder på.
Når du er ferdig med å skrive beskjeden din, trykk Esc for å hoppe fra skrivemodus til standardmodus.
Skriv ":w" (det er viktig med liten bokstav) for å lagre. Trykk enter etter kommandoen er skrevet inn.
Skriv ":q" eller ":x" for å avslutte (også her er det viktig med liten bokstav).
Enklere opplasting med SSH
Kloner du repoer med "https://" prefix, må du skrive inn brukernavn/passord hver gang du gjør en endring på en fil. Dette kan du slippe hvis du bruker SSH. Dette krever litt oppsett lokalt på maskina di, du må generere SSH nøkler for å verifisere deg.
Spesielle filer
Spesielle filer er README.md LICENCE.md og .gitignore
Fil | Hva |
---|---|
README.md | Les meg fil. På github vises denne fila som front til repoet ditt. |
LICENCE.md | Lisensen du publiserer under. Hvis ingen lisens er definert, er standard lovoppfattelse at koden er kopibeskyttet |
.gitignore | Inneholder lister av filtyper/mapper som ikke skal komme med i commits. GitHub kan autogenerere denne tilpasset spesielle prosjekt ved opprettelse av nytt repo. Det anbefales å gjøre det. |