Skip to content

Latest commit

 

History

History
307 lines (190 loc) · 10.9 KB

Git-for-viderekomne.md

File metadata and controls

307 lines (190 loc) · 10.9 KB

git alt logo

Git for viderekomne

Introduksjon

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.

Din identitet

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.

SSH

Å 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.

Generere SHH-nøkler

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.

  1. Åpne terminalen (for eksempel Git Bash)

  2. 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.
  1. 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]
    
  2. 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]!
    

Legge til de genererte nøklene til ssh-agent

  1. Start ssh-agent i terminalen.

       eval "$(ssh-agent -s)"
     Agent pid 59566
    
  2. 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, erstatt id_rsa i kommandoen ovenfor med navnet på din private nøkkel.

     ssh-add ~/.ssh/id_rsa
    

Legg til SSH-nøkkelen til GitHub-kontoen din

  1. 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 med sudo 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.

  1. Øverst på GitHub-nettsiden finner du profilbildet ditt, trykker på det og velger "Settings".

    [[/images/git-viderekomne/userbar-account-settings.png|Authentication keys]]

  2. I sidemenyen på brukeren din velger du SSH and GPG keys.

    [[/images/git-viderekomne/settings-sidebar-ssh-keys.png|Authentication keys]]

  3. Trykk New SSH key eller Add SSH key.

    [[/images/git-viderekomne/ssh-add-key.png|SSH Key button]]

  4. 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".

  5. Lim inn nøkkelen din inn i "Key"-feltet.

    [[/images/git-viderekomne/ssh-key-paste.png|The Add key button]]

  6. Trykk Add SSH key

    [[/images/git-viderekomne/ssh-add-key.png|Sudo mode dialog]]

  7. Nå dukker det kanskje opp en meldingsboks som ber deg bekrefte GitHub-passordet ditt.

    [[/images/git-viderekomne/sudo-mode-popup.png|Sudo mode dialog]]

Grunnleggende Git fra terminalen

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:

Hvordan sette opp Git første gang.

  1. 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]]

  1. 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.

Daglig bruk

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.

  1. 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
    
  2. 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
    
  3. 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. Koden git add *.md vil legge til alle .md-filer. Når du har staget de riktige filene skriver du

     git commit -m "MELDING"
    

    En god commit forklarer i korte trekk hvilke endringer som er gjort.

  4. 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 er origin om du ikke har gjort noen vesentlige endringer, mens branch er grenen du har commit-et til.

  5. 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.

Hvordan holde forken oppdatert

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]]

Noen tips og triks

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å.