Når du leser dette avsnittet antar vi at du allerede kan bruke Git, og at du har opprettet pull requests før. Dersom dette er ukjent anbefaler vi at du leser [[Komme i gang med Git|Komme-i-gang-med-Git]], som forklarer alle disse tingene.
Her skal vi se hvordan vi kan bruke Git fra terminalen, og hvordan vi løser noen vanlige problemer som kan dukke opp.
Den første tingen du må gjøre etter du har installert Git er å sette brukernavnet og e-postadressen din. Dette er viktig fordi hver commit bruker denne informasjonen som en digital signatur.
[[/images/git-viderekomne/git-username.png|Hva som skjer når du ikke setter brukernavn]]
Å sette brukernavn og e-post kan gjøres slik:
git config --global user.name "John Doe"
git config --global user.email [email protected]
Du trenger bare å gjøre dette en gang når vi bruker --global
, fordi dette gjør
at Git alltid bruker denne informasjonen, uavhengig av hvilket prosjekt du
arbeider med. Dersom du ønsker å bruke et annet navn eller e-postadresse for et
spesifikt prosjekt kan du gjøre det ved å kjøre kommandoen ovenfor uten
--global
når du er i mappen til prosjektet.
Mange av de grafiske verkøyene for å bruke Git hjelper deg med å sette identiteten din første gang du starter programmet.
Å skrive inn passord og brukernavn hver gang du skal pushe endringer til GitHub kan bli slitsomt i lengden. Ved å bruke SSH kan du slippe unna ved å gi datamaskinen din tilgang til å bruke GitHub-profilen din.
Når du setter opp SSH vil du generere en SSH-nøkkel og legge denne til i
ssh-agent
og på GitHub-kontoen din. Når du legger nøkkelen til i ssh-agent
forsikrer vi oss om at nøkkelen har litt ekstra sikkerhet gjennom et passord.
Før du genererer nye nøkler kan du sjekke om det ligger noen eksisterende i systemet. Dette steget er strengt tatt ikke nødvendig, men om du ønsker kan du kjøre
ls -al ~/.ssh
i terminalen. Om det ligger noen nøkler der fra før vil de ende på .pub
.
Sannsynligvis ligger det ingen der fra før. Dersom det gjør det kan du hoppe
videre til neste steg.
-
Åpne terminalen (for eksempel Git Bash)
-
Lim inn teksten under, men legg inn din egen e-postadresse (som du bruker på GitHub).
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Dette genererer en ny SSH-nøkkel, og bruker e-postadressen som vannmerke.
Generating public/private rsa key pair.
-
Når du blir spurt om å "Enter a file in which to save the key" trykk Enter. Da bruker du standardplasseringen.
Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
-
Nå får du opp valg om å skrive inn et passord. Du kommer til å måtte skrive inn dette passordet hver gang du skal pushe endringer til GitHub. Det er mulig å la det være tomt om du vil. For enkelhets skyld kan du bruke et kort og enkelt passord her.
Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again]!
-
Start
ssh-agent
i terminalen.eval "$(ssh-agent -s)" Agent pid 59566
-
Legg til din private SSH-nøkkel til
ssh-agent
. Dersom du har generert en nøkkel med et annet navn, eller dersom du legger til en eksistererende nøkkel med et annet navn, erstattid_rsa
i kommandoen ovenfor med navnet på din private nøkkel.ssh-add ~/.ssh/id_rsa
-
Den enkleste måten å kopiere nøkkelen til utklippstavlen direkte fra kommandolinjen. Hvordan dette gjøres varierer hårfint basert på plattformen du bruker
Linux Mac Windows xclip < ~/.ssh/id_rsa.pub
pbcopy < ~/.ssh/id_rsa.pub
clip < ~/.ssh/id_rsa.pub
På Linux må du sannsynligvis installere
xclip
manuelt, for eksempel medsudo apt-get install xclip
om du sitter på en Ubuntu-basert distro.
Tips: Dersom dette ikke fungerer kan du navigere deg til den hemmelige
.shh
mappen, åpne mappen i din favoritt-editor, og så kopiere teksten til
utklippstavlen.
-
Øverst på GitHub-nettsiden finner du profilbildet ditt, trykker på det og velger "Settings".
[[/images/git-viderekomne/userbar-account-settings.png|Authentication keys]]
-
I sidemenyen på brukeren din velger du SSH and GPG keys.
[[/images/git-viderekomne/settings-sidebar-ssh-keys.png|Authentication keys]]
-
Trykk New SSH key eller Add SSH key.
[[/images/git-viderekomne/ssh-add-key.png|SSH Key button]]
-
I "Title"-feltet skriver du et beskrivende navn for den nye nøkkelen. Hvis du bruker din personlige Mac kan du for eksempel kalle den "Min MacBook Air".
-
Lim inn nøkkelen din inn i "Key"-feltet.
[[/images/git-viderekomne/ssh-key-paste.png|The Add key button]]
-
Trykk Add SSH key
[[/images/git-viderekomne/ssh-add-key.png|Sudo mode dialog]]
-
Nå dukker det kanskje opp en meldingsboks som ber deg bekrefte GitHub-passordet ditt.
[[/images/git-viderekomne/sudo-mode-popup.png|Sudo mode dialog]]
Igjen ser vi på [[oppsumeringen av hvordan Git fungerer|Komme-i-gang-med-Git#oppsummering]], men denne gangen skal vi se hvordan hvert steg kan gjøres direkte fra terminalen. Vi deler det i to steg:
- Hver bruker som ønsker å bidra lager en fork, sin egen kopi av repo-et.
[[/images/git/create_fork.png|Skjermdump som viser hvor fork-knappen er]]
-
Brukeren lagrer (kalt clone på engelsk) sin fork lokalt på sin datamaskin.
git clone [email protected]:BRUKERNAVN/oppgaver.git
Her bruker vi SSH-lenken og ikke HTTP-lenken fra GitHub. Da kan vi bruke passordet knyttet til SSH-nøkkelen i stedet for brukernavn og passord når vi vil pushe endringer til fork-en.
Så legger vi inn Kodeklubbens repo som
upstream
. Dette kan du tenke på som en forelder til vår egen fork.git remote add upstream [email protected]:kodeklubben/oppgaver.git
Dette er nødvendig slik at det er enkelt å holde vår egen fork oppdatert med Kodeklubbens repo senere.
Nå er du klar til å bidra! Det første steget er å navigere seg inn i mappen
til din fork, f.eks cd oppgaver
fra terminalen.
-
En bruker lager en branch i sin egen fork, og bytter til den.
git checkout -b NAVN_PÅ_NY_BRANCH
Alternativt om du ønsker å bytte til en eksisterende branch skriver du
git checkout NAVN_PÅ_EKSISTERENDE_BRANCH
-
Brukeren gjør endringer i en eller flere filer, eller legger til noe helt nytt. Ønsker du å sjekke hvilke endringer som er gjort, og eventuelt hvilke filer som er staget, kan du skrive
git status
-
Brukeren kan commit-e endringer gjort i en branch,
Før du er klar til å commit-e endringene må du legge dem til i commit-en. For eksempel
git add NY_FIL.md
Her er det mye forskjellig du kan gjøre. Du kan bruke
git add .
for å legge til alle filer. Kodengit add *.md
vil legge til alle.md
-filer. Når du har staget de riktige filene skriver dugit commit -m "MELDING"
En god commit forklarer i korte trekk hvilke endringer som er gjort.
-
Når du er ferdig med å commit-e kan du push-e endringene til Internett for å gjøre den klar for deling med resten.
git push -u <remote> <branch>
Hvor
remote
som regel erorigin
om du ikke har gjort noen vesentlige endringer, mensbranch
er grenen du har commit-et til. -
Brukeren legger inn en pull request (ofte forkortet PR) og ber om at endringene hun har gjort lokalt blir merge-t med repo-et.
Bildet under illustrerer arbeidsflyten i Git mellom din datamaskin, og din fork.
[[/images/git-viderekomne/git_workflow_detailed.png|Detaljert arbeidsflyt]]
Det er også mulig å unstage en fil ved å bruke git checkout FILNAVN
.
Det kan ende andre bidragsyterene legger inn nye oppgaver eller andre endringer
til kodeklubbens repo. Det er derfor viktig at du husker og oppdatere din fork
før du begynner og arbeide, og før du pusher nye endringer. Som forklart
ovenfor, må vi først passe på at Kodeklubbens repo ligger inne som remote
med
git remote -v
Dersom det ikke allerede ligger inne kan vi legge det til via
git remote add upstream [email protected]:kodeklubben/oppgaver.git
Merk: Det er i utgangspunktet ingenting spesielt med navnet upstream, og vi kunne for eksempel ha brukt kodeklubben eller noe lignende i stedet. Konvensjonen er dog å kalle repo-et du har laget en fork fra for upstream.
[[/images/git-viderekomne/git-list-remotes.png|Viser listen av remotes i repo'et]]
Nå kan vi hente inn endringene som eventuelt er gjort på Kodeklubbens repo, men som enda ikke ligger i repo-et vårt:
git fetch upstream
Etter vi har hentet inn endringene kan vi flette sammen vår lokale mappe med endringene som er gjort på Kodeklubbens repo
git merge upstream/master
Til slutt kan vi dytte disse endringene opp på vår fork på nettet
git push
[[/images/git-viderekomne/git.png|Viser eksempel på git i praksis]]
Endringer på master branch: Anta at du har begynt å endre en fil før du har
byttet til riktig gren. Dette er heldigvis relativt enkelt å fikse. Først må du
bruke add
for å legge til endringene dine til staging area. Tenk på dette
området som en pose som du fyller med filene dine. Deretter bruker vi
git stash
for å lukke denne posen med filer slik at vi kan ta den med oss. Deretter bytter vi til riktig branch
git checkout branch_name
Før vi kan slippe ut inneholdet i posen på den nye branch-en.
git stash pop
Du kan i utgangspunktet ha så mange poser eller staging areas stashed som du
vil. Ved å bruke pop
så slipper du ut den siste du tok inn.
Branch i Branch: Husk å alltid bytte til master før du oppretter nye branches! Det kan ofte gå raskt i svingene og du kan ende opp med branches inni branches. Dette skaper ofte mye hodebry. Da er det enkleste om du bare lagrer endringene du har gjort utenfor prosjektet, og så slette branchen med
git branch -d branch_name
Pass på at du faktisk er på master branch
git checkout master
før du oppretter den nye branchen
git checkout -b branch_name
Til slutt kan du lime inn endringene du lagret utenfor prosjektet.
Dette kan løses direkte med Git ved å bruke en kombinasjon av git rebase
og
git push -f
, men det er mer avansert enn nivået denne guiden sikter på.