class: center, middle ## git-kurs
med Poëtene
### http://www.poetene.net/git/ --- ??? Skrekkhistorier fra oss: Fysikkrapport andresemester. Dele rapportfiler over USB. Begge editerer -> helvete på jord. Dele diffs over mail (Se stian og sigves spill) En venn av oss vi vil kalle for asbjørn: De som hele tiden sletta alt fra master. Han som nektet å bruke git og lastet ned manuelt Oppsummert skrekkhistorie: Team på 16. Nødendringer. Ingen versjonering. Sende minnepenner att og fram, 5 lokale utgaver 2 fjerne utgaver. -> Helvete på jord. --- ??? Håndsopprekningsspørsmål man kan begynne med for å ta tempen i salen: Hvor mange har brukt versjonskontroll før? Hvor mange har brukt Dropbo til å dele kode? Hva har annet har man brukt? Hvor mange har brukt git før? Hvor mange har jobbet med et programmeringsprosjekt sammen med andre utviklere før? --- ![](images/final-final.png) ??? Hvor mange har kjenner seg igjen i dette? --- ![](images/frustrated.png) ??? Og dette? --- class: center, middle ## Hva er versjonskontroll Hvorfor versjonere Git og github ??? - En måte å gjøre endringer på en kodebase på - Kan gå tilbake i tid, et slags CTRL+Z på filsystemet - git: distribuert kopi, mange kopier over alt - Gjør sin endring hos seg og deler den endringen med andre - github: én versjon som er hovedversjonen alle jobber opp mot --- class: center, middle ## Repository ### "prosjekt-mappe" ![](/git/images/example-git-repo.png) ??? Hva er et repository? --- class: center, middle ### Klone repository #### (a.k.a. lage en lokal kopi av et repository) ??? Clone repoet vårt som er for første oppgave. Instruksjoner i repoet. --- ``` git clone https://github.com/[USERNAME]/[REPONAME].git ``` --- class: center ``` git clone https://github.com/[USERNAME]/[REPONAME].git ``` ![https-clone](images/https-clone.png) --- class: smallcode ``` $ git status # On branch master nothing to commit, working directory clean ``` ??? Statusvindu til git. Ingen endringer ennå. Forklar hva working directory er. Untracked files. --- class: smallcode ``` $ vim README.md ... ``` ??? Så gjør vi noen endringer i README.md og lagrer... (vim er en teksteditor, kan det være greit å nevne). --- class: smallcode ``` $ git status # On branch master # Changes not staged for commit: # (use "git add
..." to update what will be committed) # (use "git checkout --
..." to discard changes in working directory) # # modified: README.md # no changes added to commit (use "git add" and/or "git commit -a") ``` ??? Forklar konseptet med: Tracked files --- class: smallcode ``` $ git add README.md ``` ??? Legger til filen så den er staged, klar til å commites --- class: smallcode ``` $ git status # On branch master # Changes to be committed: # (use "git reset HEAD
..." to unstage) # # modified: README.md # ``` ??? Staging area --- class: smallcode ``` $ git commit -m "Add project description to the readme" ``` ??? Commit, commitmelding --- class: smallcode ``` $ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # (use "git push" to publish your local commits) # ``` ??? Committed code --- ## Commit message ![](images/git_commit.png) --- ## Commit message Et bra oppsett: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html --- class: center, middle # Oppgave 1 ??? Clone repoet vårt og add + commit basics --- class: center, middle ### Lage repository ## Github og kloning --- ![](images/create-repo.png) ??? Gitignore -> også på neste foil Repo name Public / Private Initialize with readme Git-sentralen som alle jobber mot --- ## .gitignore ### Liste over filer som ikke skal spores av git ``` *.class # Kompilerte java-filer bin/ # Kan også ignorere mapper .* # Skjulte filer ``` ??? Fordeler: Slipper å tracke IDE filer, compiled classes Ulemper: Mye sosial stigma --- class: center, middle # Oppgave 2 ??? Clone repoet vårt som er for første oppgave. Instruksjoner i repoet. --- class: center, middle ### Kodedeling og merge conflicts ## Fletting og konflikter --- ## Deling av kode Flere brukere på samme github-repo Automatisk fletting av endringer ??? Når to personer har redigert i samme fil, prøver git å flette endringene sammen. Noen ganger klarer ikke git dette selv. --- ![](http://i.imgur.com/s7Q6ewX.png) ![](/git/images/merge-conflict.png) ??? Får ikke pushet pga pull av andre Den ene vil være din, den andre vil være det som kommer fra github. Endringer kan løses, og så adde feilene. --- class: center, middle # Oppgave 3 ??? Merging etc, gå sammen 2 og 2 på repoene dere nettop lagde. Push pull, og prøv å løs merges --- class: center, middle ### Jobbe uavhengig av andre ## Branches --- ## Branches #### Som å kopiere hele prosjekt-mappa og jobbe videre der #### Kjekt når man jobber på hver sine ting ??? Helt isolert fra all annen kode Feature branches --- ## Branches ### Lage branch: ``` git checkout -b BRANCH_NAME ``` --- ## Branches ### Se liste over branches: ``` git branch ``` --- ## Branches ### Bytte branch: ``` git checkout BRANCH_NAME ``` --- class: center, middle # Oppgave 4 ??? Jobbe med brancher lokalt (ingen pushing) --- class: center, middle ## Slå sammen to brancher ## Pull requests --- ## Pull requests ### Når du har lagd en commit på din egen branch ``` git push origin BRANCH_NAME ``` --- ## Pull requests ![](images/create-prq.png) --- ## Pull requests ![](images/edit-prq.png) --- ## Pull requests ![](images/view-prq.png) --- class: center, middle # Oppgave 5 ??? Jobb sammen i grupper på 2-3. Lag et repo på GitHub. Legg til de andre på gruppa på sitt repo. Alle cloner, og lager hver sin branch lokalt. Lage pull request fra branchen til slutt. Oppgave 5 på gitlr.co # Avansert git google.com › "how to move commits to another branch" › les svaret på stackoverflow.com --- # Git er ikke farlig Alt\* kan reverses i git --- # Git er ikke farlig Du finner oss i #poetene på EFNet (irc) @poetene (twitter)