27
GEDOPLAN Expertenkreis Java März 2015 Versionierung mit Git

Versionierung mit GIT

Embed Size (px)

Citation preview

Page 1: Versionierung mit GIT

GEDOPLAN Expertenkreis JavaMärz 2015

Versionierung mit Git

Page 2: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Agenda

Vorstellung

Grober Überblick über Git

Vor- und Nachteile

Migration

Best Practices

Überblick IDE-Plugins und GUI-Clients

Page 3: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

ITSD Consulting GmbH

IT Systemhaus aus OWL Standorte in Minden und Bünde ca. 20 IT-Experten bundesweit tätig

Schwerpunkte: Softwareentwicklung mit Java Beratung im Bereich Enterprise-Technologien Umsetzung von IT-Projekten im

Unternehmensumfeld

Page 4: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Was ist Git?

System zur Verwaltung von Versionsständen von Dateien

Im Unterschied zu CVS oder Subversion (SVN) ein verteiltes, dezentrales System es ist kein zentraler Server nötig jeder Benutzer arbeitet mit einem kompletten Klon

eines remote Repositories

entwickelt zur Verwaltung des Quellcodes des Linux-Kernels 2005 wurde Bitkeeper kostenpflichtig Linus Torvalds entwickelt daher Git Parallel Entwicklung von Mercurial von anderen Entwicklern

Seit 2008: Github beschleunigt als Hoster für OpenSource-Projekte die Verbreitung

Page 5: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Zentrales Versionskontrollsystem

Arbeitsverzeichnis

Test.pdf Hallo.java

Entwickler A

Arbeitsverzeichnis

Test.pdf Hallo.java

Entwickler B

Repository

Page 6: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Dezentrales Versionskontrollsystem

Arbeitsverzeichnis

Test.pdf Hallo.java

Entwickler A

Rep

osi

tory

Fetch/Push

Checkout/ Commit

Arbeitsverzeichnis

Test.pdf Hallo.java

Entwickler BR

epo

sito

ry

Checkout/Commit

Repository

Page 7: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Repository Strategien

Zentral Normalerweise in Unternehmen

ZentralesRepository

Entwickler Entwickler Entwickler

Page 8: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Repository Strategien

Integrationsmanager Wird oft von Open Source Projekten genutzt (z.B. bei GitHub) Verwendung von Pull Requests

Entwickleröffentlich

Entwickleröffentlich

Entwickleröffentlich

Integrationsmanager

Entwicklerprivat

Entwicklerprivat

Entwicklerprivat

BlessedRepository

Page 9: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Repository Strategien

Diktator und Leutnant z.B. beim Linux-Kernel verwendet Verwendung von Pull-Requests

BlessedRepository

Entwickleröffentlich

Entwickleröffentlich

Entwickleröffentlich

Diktator

Leutnant Leutnant

Page 10: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Weiteres zu Git

Es werden Snapshots des gesamten Projekts versioniert

Pro Commit werden nur Dateien gespeichert, die sich tatsächlich geändert haben

Commits kann man sich als Knoten eines Graphen vorstellen, die auf ihre Vorgänger zeigen

Daten werden komprimiert

Manipulationen fallen sofort auf, da die Commit ID ein Hash-Wert basierend auf Metainformationen, Inhalt und Eltern-Commits ist

automatische Konvertierung von Zeilenenden

Branches werden zum zentralen Konzept

Page 11: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Workflow mit Branches "Gitflow"

Git ermöglicht verschiedene Workflows Dieser Workflow hat sich durchgesetzt Veröffentlicht von Vincent Driessen Es ist keine Erweiterung für Git - Alles ist mit Bordmitteln umsetzbar

master

hotfix

release

development

feature

Page 12: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Noch mehr zu Git

Staging area zum Zusammenstellen von Änderungen, die committedwerden sollen

"commit" Befehl schreibt nur in lokales Repository

analog liest "checkout" nur aus dem lokalen Repository

Zum Übermitteln der Änderungen an ein remote Repository ist ein weiterer Befehl nötig: "push"

Zum Aktualisieren des lokalen Repositories dient "fetch"

"pull" ist ein "fetch" mit anschließendem Merge der Änderungen in den lokalen Workspace

Page 13: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Daten in das (lokale) Repository schreiben

Arbeitsverzeichnis Staging Area Git Repository

Dateien in die Staging Area hinzufügen

Commit erzeugen

Stand auschecken

git commitgit add

git checkout

Dateien zur Staging Area hinzufügen und Commit erzeugen

git commit -a

Page 14: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Der Weg vom/zum remote Repository

ArbeitsverzeichnisLokales

RepositoryZentrales

Repository

Push

Pull

FetchMerge / Rebase

Commit

Clone

Page 15: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Vorteile

Geschwindigkeit von fast allen Operationen

Einfaches und sicheres Mergen

Einfaches und schnelles Branching Branches/Tags erzeugen im Ggs. zu SVN keine Kopien

lokale Branches zum Wechsel zwischen Aufgaben

Gute Erkennung von umbenannten oder verschobenen Dateien

Dezentrales Arbeiten

Einbindung von Code-Review möglich

Flexibilität

Page 16: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Nachteile

Binäre Dateien (jeweils alle Versionen im lokalen Repository)

Speicherplatzverbrauch

Dauer des Klonvorgangs

SHA1-Hash nicht gut als Versions- oder Build-Nummer geeignet(im Gegensatz zur Revisions-Nummer bei SVN)

Flexibilität erkauft mit Komplexität

Git betrachtet nur Dateien, leere Verzeichnisse werden ignoriert

Berechtigungen nur für das gesamte Repository

Page 17: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Migration von SVN/CVS

Unterstützung durch Skripte

Nutzung von SVN als "remote Repository" möglich

Wichtig: Migration gründlich planen vorhandene Daten analysieren Anpassung bzw. Erstellung eines Workflows Richtige Einteilung der Repositories Bei langer Historie evtl. Kürzung der Historie

Page 18: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Best Practices

Beim Einstieg nicht sofort alle Möglichkeiten nutzen

aussagekräftige Commit Kommentare schreiben

Änderungen thematisch in Commits zusammenfassen

Im Team auf einen Workflow einigen

Änderungen aus Basis eines Branches häufig in den Branch übernehmen

Keine Angst vor Rebase ("Umhängen" von Commits an einen anderen Eltern-Commit)

Nie bereits per "push" veröffentlichte Historie ändern, etwa Commitsverschieben (Rebase), Branches umbenennen

Page 19: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Tools

SourceTree Git Gui / Gitk Github Client TortoiseGit EGit / JGit GitX (L)

Page 20: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

SourceTree

Von Atlassian Kostenlos unter http://www.sourcetreeapp.com/ Nutzt natives Git

Page 21: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Git Gui/Gitk

Ist in der MsysGit Installation enthalten Git Gui vollwertiges Programm zur Arbeit mit einem Git Repository Gitk stellt Log dar

Kann über Kommandozeile aufgerufen werden Probleme mit Übersetzungen

Deutsche Sprachdatei entfernen für englische Sprache Kostenlos

Page 22: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Github Client

Eigenes natives Git Funktioniert auch mit eigenen Repositories Kostenlos unter https://windows.github.com/

Page 23: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

TortoiseGit

Nutzt natives Git Angelehnt an TortoiseSVN Kostenlos, siehe

https://tortoisegit.org/

Page 24: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Egit/JGit

JGit ist eine Java Implementierung von Git EGit als Eclipse Plugin JGit auch verwendet von Netbeans und IntelliJ IDEA Kostenlos

Page 25: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

GitX (L)

grafischer Git Client für MacOS X Kostenlos Download unter http://gitx.laullon.com/

Page 26: Versionierung mit GIT

Versionierung mit Git GEDOPLAN Expertenkreis Java - 26. März 2015

Die Serverseite

Nutzung über Netzwerk-Shares ohne Server möglich einfacher Server in Git enthalten

gitolite ist ein kostenloser Server mit Rechteverwaltunghttp://gitolite.com/

Attlasian bietet kostenpflichtig "Stash" an:https://www.atlassian.com/software/stash

klare Empfehlung eines Vortragsteilnehmers: GitLab – weitere Infos unter https://gitlab.com/

Page 27: Versionierung mit GIT

ITSD Consulting GmbHBlankensteinstraße 6232257 Bünde

Telefon: +49 - 5223 - 793 34 00Telefax: +49 - 5223 - 793 34 32Web: www.itsd-consulting.deE-Mail: [email protected]

Ihr Ansprechpartner

Carsten Frewert