Versionshantering med Git. Henrik Henriksson 17 april 2018

Relevanta dokument
Introduktion till git

Versionshantering. Problem som uppstår i större (samt även mindre) projekt:

Introduktion till Git

1 Vad är Versionshantering? 2 Git. 2.1 GitHub

Versionshantering med Git

GitHub for Windows och GitShell

Övning GIT Andreas Wieden

TDP005. Föreläsning 2. Filip Strömbäck

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

Bryt ut logiken för att göra Bulk-ersättning av Category i Index i ProductControllern.

Introduktion till Git Anton Ekberg Version 2

DRAFT. CVS kurs laboration 1 Checka in, ut och uppdatera. Marcus Rejås. 17 november 2002

Har funnits nästan lika länge som datorerna. Manuell process, svarta tavlan Verktygsstöd kom tidigt redan i början på

CVS-Introduktion. CyberRymden Introduktion till CVS,17 november (27) Marcus Rejås

Fördjupningsarbete/laboration om Git

Tfn Telephone Kontr Checked. Revisionshistoria Revision history Rev Namn Name Datum Date Ändring Change

Börja med git och GitHub - Windows

Mer om kodkvalitet. Mer om kodkvalitet. Hur kan man jobba med kodkvalité? Hur kan man jobba med kodkvalité? Hur kan man jobba med kodkvalité?

Övningar Lektion3 Avancerade Webbteknologier 2

Agil användbarhetsutveckling för handhållna enheter. Per Lind

Emacs. Eric Elfving Institutionen för Datavetenskap (IDA)

Unix-miljöer i större sammanhang

Programmering i C++ Kompilering från kommandoraden

Release. Konfigurations & Versionshantering samt Subversion. Konfigurations vs Versionshantering. CI -definition. Henrik Bergström

Server-kod. TDDD80 Mobila och sociala applikationer

Problemen i ett utvecklingsteam

GIT som alternativ till CVS/SVN i agila utvecklingsmiljöer

Versionshantering. Jan Erik Moström

JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

Handbok Cervisia. Bernd Gehrmann Carlos Woelz Översättare: Stefan Asserhäll

UNIX verktyg. Användbara kommandon Fil och informationssökning Tags Versionshanteringssystem

Grundläggande termer. Några olika system. F11 Grunderna i Versionshantering. Git basic. Origin. Git basic. Git basic. Local #1. Local #3.

Laboration 2 Datorverktyg vid LiU

UTVECKLINGSVERKTYG. Praktiska tips för PUM-projekten

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

DI Studio nyheter

Verktyg och Utvecklingsmiljö. Jochim von Hacht

TDP005 Projekt: Objektorienterat system

FLEXILAGER Ett hjälpmedel för anpassad lagerhantering. Original -version

Handbok kdesvn. Rajko Albrecht Översättare: Stefan Asserhäll

Beställning av certifikat för anslutning till BankID (RP certificate) Version

Så delar du filer. utan att bli övervakad LAJKA-GUIDE

Subversion - varför?

Continuous Integration med Jenkins. Linus Tolke Enea Experts

TDP005, Projekt: objektorienterade system

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Laboration: Grunderna i MATLAB

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

JobOffice SQL databas på server

Elements, säkerhetskopiering och dina bilder

Handledning Konfigurationsstyrning tjänstedomäner

Gör vi vårt jobb? En enkätundersökning på Datavetenskap

BRUKSANVISNING FÖR NÄTVERKSANVÄNDARE

Nibe xx45 Viewer. Ett program för visualisering av Nibes loggar WebIQ:s Energibutiken

Instruktioner. Innehåll: 1. Vad är Kimsoft Control (SIDA 2) 3. Hem (SIDA 2)

Installation/start av LOGGER

Tenta i Grundläggande programmering DD klockan

Handledning. Konfigurationsstyrning tjänstedomäner. Version ARK_

TDP005, Projekt: Objektorienterade System. Laboration: Eclipse

Webbgenvägar. Krishna Tateneni Yves Arrouye Översättare: Stefan Asserhäll

HA Kluster med CoreOS & Docker Magnus Persson

Outlook Axxell Utbildning Ab

Manual - Storegate Team med synk

Storegate Pro Backup. Innehåll

ClearCase. Versionshantering

Manual - Storegate Team

kl Tentaupplägg

Sed och Awk. Linuxadministration II 1DV421. Monday, August 8, 11

Dokumentation för VLDIT AB. Online classroom

Att bygga enkel webbapplikation i Docker

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

Linuxadministration I 1DV417 - Laboration 3 Installation av ny hårddisk, RAID och logisk volymhantering

============================================================================

För att skriva CSS-kod använder man sig av olika kommandon. Ett exempel på hur man kan skriva kod för att ändra textfärg kan vara:

Inledning LAMP Perl Python.

Uttryck, satser och strömhantering

Installation av datafil för lokal lagring av e-post i Microsoft Outlook 2016

Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa.

Beställning av Förlitandepart-certifikat Version

Referens till. WeavePoint 6 Mini

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Innehåll. Förändringar i v5.3

Användarutbildning i SiteVision

1 Allmänt. 2 Hur gör man. 2.1 Gå till lagets sida, Logga in genom att trycka på hänglåset

Insamlingsverktyg - teknisk beskrivning av metadataformuläret

Klicka på menyknapp Flexa till rätt läge. I exemplet ovan kan nyckelhöjder ändras i både kanal 2 och kanal 7.

Gmail, kalendern och Google dokument. Här lär du dig att skicka

Manual - Storegate Team

På servern För att registrera och köra en Topocad 17 nätverkslicens krävs att man installerar den senaste Licensservern

TDP005, Projekt: Objekt-orienterade System. Laboration: Eclipse

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Som student vid Linköpings Universitet får du tillgång till ett lisam-baserat e-postsystem.

Manual digipostpro. samt digivu. v WAN och LAN 15:41. digipostpro Sätt i kort... Ansluten

Operativsystem och användargränssnitt

Dr. Gustav Taxén MDI-Gruppen, CSC / VIC-Sthlm gustavt@kth.se

Rensa cache-minnet hos din webbläsare

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

Datorintroduktion 2009 Föreläsning 1. Dieter Larsen (IT-chef Matematiska vetenskaper)

Nyheter i. Solen Administration 6.6

Transkript:

Versionshantering med Git Henrik Henriksson 17 april 2018 1

Versionshantering? rapport_v0.4.docx rapport_v0.5.pdf rapport-v1.0.cpp rapport_v1.0.docx raport_v0.9-final.docx komplettering-v2.0.docx färdig.7.pdf rapport_v1.1.docx rapport_v1.0-inlämnad.rtf henhe459.docx 2

Vad vill vi ha från vår versionshantering? Ett bra versionshanteringssystem bör bland annat Låta oss ändra saker utan att förstöra tidigare arbete Se vad som förändrats mellan två versioner Hjälpa oss arbeta flera personer i samma projekt Ha ett bra workflow Ha en översikt över projektets historia Veta att vårt arbete är säkert Veta att tidigare versioner inte har ändrats 3

Vad vill vi ha från vår versionshantering? Att ta kopior på filer hjälper oss att Låta oss ändra saker utan att förstöra tidigare arbete Se vad som förändrats mellan två versioner Hjälpa oss arbeta flera personer i samma projekt Ha ett bra workflow Ha en översikt över projektets historia Veta att vårt arbete är säkert Veta att tidigare versioner inte har ändrats 4

Vi vill ha mer... För att versionshantera kod finns väldigt många system, alla med sina fördelar och nackdelar. Även om de äldre systemen ( 2000) mest har nackdelar idag. RCS (1982) CVS (1986) BitKeeper (2000) Darcs (2002) SVN (2004) Mercurial (2005) Git (2005)... 5

Git Git är troligen det mest populära versionshanteringsverktyget idag Git skrevs ursprungligen av Linus Torvalds specifikt för versionshantering av källkoden till Linux-kärnan 1 Linus är en kernelutvecklare, inte en gränssnittsdesigner Gits användargränssnitt har utvecklats organiskt av andra kring de få funktioner Linus ursprungligen lade till Git = GitHub = GitLab 1 En intressant historia som tyvärr är för lång för den här marginalen 6

Git För att använda git behöver vi ha koll på några saker En git repository är en mapp med några specialfiler som git använder för att hålla koll på vår historik Vi kan versionshantera allt som ligger i mappen Gits specialfiler ligger alla i den dolda undermappen.git Filerna som ligger utanför.git är vår arbetskopia Vi kan göra vad vi vill med vår arbetskopia utan att påverka historiken! 7

Lite metadata Git tycker om att veta vem man är. $ git config -global user.name "Henrik Henriksson" $ git config -global user.email "hx@hx.ax" $ git config -global core.editor nano 8

git init För att skapa en git repository kör vi kommandot git init git init skapar en.git mapp, men gör ingenting annat Gamla filer i mappen kommer ligga kvar ostört 9

git status git status är generellt sett det kommando man använder mest Visar upp en allmän status för hela repon Tips: Det är bra att köra git status före man kör något annat git-kommando. Varje gång. 10

Diffar, Deltan och Stora Dält Ett delta, ibland kallat för diff är en beskrivning över vad som har ändrats i en eller flera filer Vi kan läsa diffar för att veta vad som ändrats Vi kan skapa en nyare version av en fil genom att patcha den med ett delta Vi kan till och med skapa filer från en serie delta + A + A B + B C C 11

Diffar Vi kan bygga upp vårt projekt genom att gå genom alla förändringar som skett! 12

Stageing Saker kan ha lite olika status Untracked Filer som inte borde finnas Clean Filer som är vad de borde vara Modified Saker som ändrats från vad de borde varit Staged Ändringar vi vill spara permanent 13

Commit En commit 2 är en diff som man valt att spara undan tillsammans med lite extra metadata. Praktiskt sett så är det en version. I en commit finns bland annat 3 En diff Ett unikt ID Förälderns unika ID En beskrivning över vad commiten innehåller Vem som skapat commiten Tidstämpel Det unika ID som används är en SHA1-hash skapad från resten av informationen 2 Begångande på svenska. Använd engelska. Snälla. 3 Detta gäller git, men de flesta system har liknande data i en commit 14

Commit Eftersom varje commit har en förälder kan vi ta fram en lista med de commits som lett fram till godtycklig commit, från tidernas begynnelse En commit går att hitta via commitens hash Vi kan alltså återskapa hur hela projektet såg ut, in i minsta detalj, utgående från en hash, eller till och med bara de första 5 10 tecknen i hashen 15

git commit git commit används för att skapa en ny commit baserat på vad som är staged git commit Öppnar upp en textredigerare man får skriva sitt commitmeddelande i och skapar sedan en commit git commit -m meddelande Skapar en commit direkt 16

git add git add används för att stagea filer, markera att man vill committa dem. Kallas ofta för att adda eftersom att stagea inte är ett vettigt svenskt ord. git add exempel.txt Markera nuvarande förändringar i filen exempel.txt som staged git add -p Git lotsar dig genom alla förändringar, hunks, i projektet och frågar vilka du vill adda 4 4 tryck på? för hjälp 17

git reset För att ta bort saker ur staged så används git reset. Ändringar tas inte bort, bara adden. git reset Rensar staged helt git reset exempel.txt Tar bort exempel.txt ur staged git reset -p Git frågar vilka saker du vill plocka bort ur staged. 18

git diff git diff Visar diffen mellan historiken och vad man ännu inte har addat, oftast helt enkelt vad man har ändrat git diff -staged Visar diffen mellan historiken och staged 19

git log För att få se en historik över tidigare commits använder man git log. Det finns några olika flaggor som är bekväma att använda git log -graph Visualisera grafen som vår historik utgör git log -p Visa diffarna git log -oneline Visa bara committmeddelande 20

git checkout git checkout hello.cpp kan användas för att nollställa filen hello.cpp 21

Remotes För att man ska kunna arbeta tillsammans behöver man kunna skyffla runt historik mellan olika datorer GitHub, GitLab, Bitbucket, etc Skapa en SSH-nyckel för autentisering $ ssh-keygen (och spamma Enter ) $ cat ~/.ssh/id_rsa.pub (kopiera) Klista in på rätt ställe i GitHub/Lab/Bucket 22

git push git push trycker upp nya ändringar i historiken till remote 5 5 Man trycker upp från den branch man står i till motsvarande på remote. För att trycka upp allt: $ git push -all För trycka upp en ny branch som inte finns på remote: $ git push -u origin namn 23

Branching Vi behöver inte begränsa oss till endast en förälder, vi kan ha flera! Vi kan göra nya grenar 6 genom att ha två olika commits med samma förälder Vi kan slå ihop grenar genom att låta en commit ha flera föräldrar, en merge Vår historik är en riktad acyklisk graf 6 eng: branch 24

git branch Kommandot git branch visar vilka grenar som finns och vilken man står på just nu. För mindre projekt använder man ofta bara en, master 25

git pull För att dra ner ändringar från servern används git pull. 7 7 Pull jobbar på den gren man står i. 26

Konflikter Men om ändringarna krockar då? 8 Känns det jobbigt? Googla git mergetool 27

Konflikter Men om ändringarna krockar då? Git skriker argsint på dig Andas, det är lätt att lösa Kör $ git status och kolla vilka filer det krockar i Öppna filerna en i taget och sök efter <<<<. Gör så att det ser rätt ut och spara 8 Kör $ git add och $ git commit som vanligt. Ibland addar git automatiskt åt en. 8 Känns det jobbigt? Googla git mergetool 27

git clone För att hämta hem en existerande git-repo använder man git clone <url>. Det går att copy pasta rakt av från GitHub/Lab/Bucket. 28

Commits Det är viktigt att göra bra commits En diskret ändring per commit Beskrivande meddelande, max 80 tecken Inga onödigheter i diffen 29

Fler funktioner!

git checkout B 30

git checkout -b C 31

git merge B 32

git rebase B 33

git revert <hash> 34

Nu backar vi lite

Vad vill vi ha från vår versionshantering? Git hjälper till att Låta oss ändra saker utan att förstöra tidigare arbete Se vad som förändrats mellan två versioner Hjälpa oss arbeta flera personer i samma projekt Ha ett bra workflow Veta att vårt arbete är säkert Veta att tidigare versioner inte har ändrats Ha en översikt över projektets historia 35

Några tips $ git log filnamn.txt $ git blame filnamn.txt Den senaste committen på branchen man står på kallas för HEAD Läs på om branching före man börjar använda det aktivt 36

Avslutande ord Git är ett otroligt kraftfullt verktyg. På gott och ont. Börja enkelt, commit, push och pull räcker till det mesta Kör hellre en commit för mycket än en för lite Försök att inte jobba på samma ställe som någon annan för att slippa konflikter Ta en kopia på ett projekt för att testa vad olika kommandon gör $ git <kommando> -help https://www.youtube.com/watch?v=4xpnkhjaok8 37