Versionshantering med Git

Relevanta dokument
Introduktion till Git

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

Versionshantering med Git. Henrik Henriksson 17 april 2018

Introduktion till git

GitHub for Windows och GitShell

1 Vad är Versionshantering? 2 Git. 2.1 GitHub

Övning GIT Andreas Wieden

Introduktion till Git Anton Ekberg Version 2

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

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

Versionshantering. Jan Erik Moström

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

Fördjupningsarbete/laboration om Git

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

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

Laboration 10 - Eclipse

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på:

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Börja med git och GitHub - Windows

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

Kompilera och exekvera Javakod

Objektorienterad programmering i Java I

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

Eclipse en handledning

TDP005, Projekt: objektorienterade system

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

2 Eclipse en handledning

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Övningar Lektion3 Avancerade Webbteknologier 2

NetBeans 5.5. Avsikt. Projektfönster

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

TDP005, Projekt: Objektorienterade System. Laboration: Eclipse

Installationsanvisning för Su Officemallar 2011 För Mac Word och PowerPoint

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

JAVA Mer om klasser och objektorientering

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

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

Installationsanvisning för Su Officemallar 2011 För Mac Word och PowerPoint

NetBeans 7. Avsikt. Projektfönster

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Instruktioner för att kunna programmera på skolans datorer

Objektorienterad Programmering (TDDC77)

Storegate Pro Backup. Innehåll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Installationsanvisning för Su Officemallar 2011 För Mac Word och PowerPoint

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Programmering för språkteknologer II, HT2011. Rum

ID1004 Laboration 3, 5-6 November 2012

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

BRUKSANVISNING FÖR NÄTVERKSANVÄNDARE

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.

Datorlaboration 0, Programmering i C++ (EDA623)

Föreläsning 5-6 Innehåll

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Laboration 1 Introduktion till Visual Basic 6.0

Kompilering av Java-program med eclipse SDK för den som kan BlueJ

TDDC77 Objektorienterad Programmering

Inlämningsuppgift 1 Programmeringsteknik MN1 vt02

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Innehållsförteckning. 9 Större projekt Övningsuppgifter...32

Programmering i C++ Kompilering från kommandoraden

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

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Skapa modeller i Vikingen

Dugga i Grundläggande programmering STS, åk

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen, EDAA10 Programmering i Java

UTVECKLINGSVERKTYG. Praktiska tips för PUM-projekten

Eclipse. Kort genomgång

Förändringar i v4 SR-4

Eclipse en handledning

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Introduktionsguide för

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Föreläsning 8: Exempel och problemlösning

surell consulting ab

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Välkommen som användare av medietekniks och informatiks publika studentserver

Lösningsförslag övning 2.

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Transkript:

Versionshantering med Git Vad, varför och hur? Magnus Nielsen Institutionen för datavetenskap, LiU magnus.nielsen@liu.se

Vad ska jag ha Git till? Versionshantering Sparar källkod (eller vad som helst) i ögonblicksbilder Vi kan spåra ändringar Vi kan spola tillbaka i tiden Enkel delning av filer för arbete i grupp Fungerar väl för t.ex. källkod, dokument, presentationer, etc. Tillgänglighet Vi kan arbeta på vilken dator som helst Vi kan återskapa arbete om olyckan är framme.

Git till Windows / MacOS Git bash Fullständig bash terminal Programmet Git Samma funktionalitet som vi är vana vid från IDA's salar https://git-scm.com/downloads Eclipse Eclipse plugin för git (ej rekommenderad approach)

Vad består Git av? Två delar Local som ligger på din hårddisk Remote som ligger på internet (t.ex. på Gitlab) Flera användare kan ha egna lokala repos kopplade till samma remote

Hur fungerar det? Några grundläggande kommandon: git add filnamn git commit Lägger till en fil till trackern. Denna fil, eller rättare sagt förändringar i densamma, kommer att sparas i nästa commit Spara alla filer, eller förändringar i filer, som vi gjort add på sedan föregående commit git push Skicka alla lokala commits till remote

Vad händer när jag gör en commit? Ögonblicksbild Består av ändringar Lagras m.h.a. hashning (mer om hashning i DALG, pepp!) Ex: Vi står i ett nytt git-repository och skapar filen Main.java, vilken består av en main-metod och utskriften Hello World. När vi sparat kör vi, i tur och ordning: git add main.java git commit -m Initial commit (mer om vad detta betyder senare)

Vad händer när jag gör en commit? (Forts.)

Fler kommandon git push git pull Skicka alla lokala commits, som ej finns på remote, till remote Hämta hem alla commits från remote som inte finns i local git clone <adress till remote> Klonar hem ett helt remote repo som vi inte tidigare hade på vår dator Skapar en mapp med repots namn och allt innehåll (samtliga commits) som fanns på remote vid kloningsögonblicket Vi har en lokal commit som inte finns på remote, så vi kör git push.

Git push

Flera kan arbeta mot samma remote User 2 kör git clone <adressen till remote> Hela repot klonas hem User 2 har nu en likadan arbetskatalog som User 1

Potentiella problem (mergekonflikter) User 2 bidrar med en utskrift: This is awesome! git add Main.java git commit -m Added awesome print. git push

Potentiella problem (mergekonflikter) User 2 bidrar med en utskrift: This is awesome! git add Main.java git commit -m Added awesome print. git push

Mergekonflikter (forts.) User 1 lägger till en variabel: String name; git add Main.java git commit Added an invaluable variable for future use git push

Mergekonflikter (forts.) User 1 lägger till en variabel: String name; git add Main.java git commit Added an invaluable variable for future use git push

Mergekonflikter (forts.) Vi har fått en merge konflikt Samma fil har två olika innehåll på samma version.

Mergekonflikter (forts.) Hur undviker vi mergekonflikter? Vi delar upp arbetet User 1 får jobba i ett paket eller med vissa filer, User 2 i andra (genomförbart) Vi vägrar jobba med andra (U på kurser / inga jobb) Hur löser vi det istället för att undvika det? Vi testar att ta bort Main.java, och köra git pull: Whew, det fungerade! Allt vårt arbete försvann, men vi räddade i alla fall User 2's arbete.

Lösa mergekonflikter på riktigt git pull Vi tar hem det arbete andra har gjort och löser konflikten lokalt. Vi får upp ett fönster med lite skrämmande text och otäcka knappkombinationer. Vi trycker ctrl-x ctrl-c (välbekant för emacsanvändare, kanske) för att stänga fönstret. git pull skriver ut de filer som berörs av konflikten: Auto-merging Main.java Merge made by the 'recursive' strategy. Main.java 2 +- Vi öppnar filen i vår favoriteditor (Eclipse, Emacs, etc.) Vi kan se vad som orsakade konflikten, och reparera skadan

Lösa mergekonflikter på riktigt (forts.) I detta fallet kan det vara en väldigt lättlöst konflikt (varför då?). Git's merge kan då lösa det åt oss.

Att lösa svårare konflikter. Svårare konflikter: I källkoden finns nu konfliktmarkörer: <<<<<<< HEAD // Skillnader tillhörande remote ======= // skiljerad // Dina lokala skillnader >>>>>>> Vi löser konflikten genom att: Ta bort det vi inte vill ha kvar Spara allt, inget, den ena delen, den andra, eller en kombination Ta bort konfliktmarkörerna Upprepa för samtliga sektioner med konfliktmarkörer Upprepa för samtliga berörda filer Ny add / commit / push

Konflikten löst

Flaggor Vissa git-kommandon tar flaggor. git commit -m flaggan låter oss sätta ett bra meddelande på vår commit -a flaggan tar automatiskt med alla ändringar på filer som sedan tidigare finns med i trackern, utan att vi behöver göra nya git add Kan kombineras, ex: -am Används på följande vis: git commit -am bra meddelande som beskriver denna commit git add -A flaggan lägger till samtliga filer i arbetskatalogen som inte nämns i.gitignore (mer om.gitignore i slutet)

Spola tillbaka tiden Ytterligare nya kommandon: git log Tar fram en lista på alla commits (nyast överst) Navigera med pil upp / ned, avslutade med q Visar commitmeddelanden och hash git checkout Låter oss hämta ut en specifik version eller branch (avancerad användning, se länkar i slutet)

Spola tillbaka tiden (forts.) Vi har gjort ett misstag och vill spola tillbaka tiden: git log commit e5e2fcd706c343e85bad6337d54bd4be27e09ec1 (HEAD -> master, origin/master, origin/head) Author: User 2 <mysko@myskomail.strange> Date: Wed Feb 20 23:38:00 2019 +0100 Added awesome print commit cef0a8e20c19f386655bea3a77e0978f674101f5 Author: Magnus Nielsen <magnus.nielsen@liu.se> Date: Wed Feb 20 13:29:17 2019 +0100 Initial commit Vi vill tillbaka till initial commit git checkout cef0a8e20c19f386655bea3a77e0978f674101f5 Vi gör en checkout på den hash som matchar det commitmeddelande vi vill tillbaka till. Våra (berörda) filer ser ut exakt som när vi gjorde den commiten.

Gitignore Om vi vill kunna använda oss av, exempelvis, git add -A (för att lägga till alla filer) kan det vara bra att inte få med skräpfiler..gitignore Innehåller de filtyper, eller specifika filnamn, vi vill ignorera. Ska ligga i roten till projektet (utanför src mappen) Exempel på.gitignore för java:.metadata.project *.class /bin/

Jämföra local och remote git diff Visar skillnaderna mellan filernas nuvarande tillstånd och tillståndet på remote. Ex: git diff git diff diff --git a/main.java b/main.java index 307c6ff..89c6ab5 100644 --- a/main.java +++ b/main.java @@ -2,5 +2,7 @@ public class Main { public static void main(string[] args) { String name; System.out.println("Hello world"); - System.out.println("This is awesome!"); } + System.out.println("This is awesome!"); + System.out.println("Another new print"); + } } Vi ser tydligt, tack vare + och samt färger vilka förändringar som gjorts var.

Jämföra local och remote (forts.) git status Visar statusen på alla filer i mappen. Ex: git status Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: Main.java // Modifierade filer som redan addats någon gång Untracked files: // Filer som ej addats, någonsin (use "git add <file>..." to include in what will be committed).classpath.gitignore.project (Visst ja, det kanske är en bra idé att lägga till vår.gitignore, i synnehet innan någon annan börjar köra git add -A).

Avancerat Eclipse git plugin (Egit) https://www.eclipse.org/egit/ Läs och använd på eget bevåg (rekommenderas inte direkt då terminal är både kraftfullare och lättare för oss att supporta). Branching tutorial https://learngitbranching.js.org/ Avancerat. Mycket användbart om man börjar känna sig bekväm med git och vill lära sig fler kraftfulla knep.