Verteilte Versionskontrolle mit Git

28
GoBack

description

Ein Vortrag zum Thema verteilte Versionskontrolle mit Git. Der Vortrag geht auf die Historie von Versionskontrollsystemen ein, stellt Vorteile von Git dar und bietet einige Beispiele und viele Links zu Git-Themen.

Transcript of Verteilte Versionskontrolle mit Git

Page 1: Verteilte Versionskontrolle mit Git

GoBack

Page 2: Verteilte Versionskontrolle mit Git

Seite 1

Page 3: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Seite 2

Verteilte Versionsverwaltungmit git

als Ergänzung oder Ersatz für klassische Systeme wie Subver sion

Jan Dittberner <[email protected]>

29.09.2009

Page 4: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Verteilte Versionsverwaltung

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 3

Page 5: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Historie - lokale Versionkontrolle

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 4

■ Verzeichniskopien

■ RCS, SCCS

■ Microsoft VSS (über Fileshares netzfähig)

Page 6: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Historie - zentrale Systeme

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 5

■ CVS (basiert auf RCS)

■ Subversion (SVN)

■ diverse andere (Perforce, CM-Synergy)

Page 7: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Historie - dezentrale Systeme

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 6

■ BitKeeper

■ Mercurial (hg)

■ Bazaar (bzr)

■ Git

■ Darcs

Page 8: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Vorteile dezentraler SCM-Systeme

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 7

■ komplette lokale Historie

■ Möglichkeit zur Offline-Arbeit

■ sehr schnell (Diff, Log, etc.)

■ verschiedene Workflows möglich

■ lokale Tests (z.B. für Featurebranches) beeinflussenandere Entwickler nicht

■ durch hohe Geschwindigkeit häufig kleinere Commits(bessere Nachvollziehbarkeit von Änderungen)

■ robustere Merging-Mechanismen

Page 9: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Nachteile dezentraler SCM-Systeme

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 8

■ keine zentrale Kontrolle

■ Umgang muss erlernt werden (Nachteil?)

Page 10: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Git

VerteilteVersionsverwaltung

GitHerkunft undVerbreitung

Warum Git?

Verfügbarkeit

Toolunterstützung

Git praktisch

Diskussion/Fragen

Seite 9

Page 11: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Herkunft und Verbreitung

VerteilteVersionsverwaltung

GitHerkunft undVerbreitung

Warum Git?

Verfügbarkeit

Toolunterstützung

Git praktisch

Diskussion/Fragen

Seite 10

■ Ursprünglich von Linus Torvalds für die Entwicklung desLinux-Kernels als Ersatz für das kommerzielle Bitkeeperentwickelt.

■ Einsatz inzwischen in vielen kleineren und auch extremgroßen Projekten: Linux Kernel, Wine, Perl, GNOME,Qt, Ruby on Rails, Android, Fedora, Debian, X.org, VLC

■ wird inzwischen von einigen OpenSource-Hosternangeboten. SourceForge [3] und Github [4] sind diebekanntesten.

Page 12: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Warum Git?

VerteilteVersionsverwaltung

GitHerkunft undVerbreitung

Warum Git?

Verfügbarkeit

Toolunterstützung

Git praktisch

Diskussion/Fragen

Seite 11

■ Umfangreiche Projektseite [1] und Dokumentation [2].

■ vollständige Dokumentation aller Unterbefehlegit help <subcommand >■ leichtgewichtige lokale Branches

■ sehr schnell

■ sehr kompakte lokale Repositories (teilweise kleiner alsSVN-Checkout einer einzelnen Version)

■ erlaubt lokales Staging von Änderungen

■ unterstützt praktisch beliebige Workflows

■ siehe auch http://de.whygitisbetterthanx.com/

Page 13: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Verfügbarkeit

VerteilteVersionsverwaltung

GitHerkunft undVerbreitung

Warum Git?

Verfügbarkeit

Toolunterstützung

Git praktisch

Diskussion/Fragen

Seite 12

Verfügbarkeit:

■ Download von der Git Projektseite [1]

■ Debianaptitude install git -core■ Windows

◆ Cygwin http://www.cygwin.com/

◆ msysGit http://code.google.com/p/msysgit/

Page 14: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Toolunterstützung

VerteilteVersionsverwaltung

GitHerkunft undVerbreitung

Warum Git?

Verfügbarkeit

Toolunterstützung

Git praktisch

Diskussion/Fragen

Seite 13

■ TortoiseGit – Explorer-Erweiterung ähnlich TortoiseSVNhttp://code.google.com/p/tortoisegit/■ eGit – Eclipse Git Team Providerhttp://git.or.cz/gitwiki/EclipsePlugin■ ggit (Gnome), gitk (Tcl/Tk), gitx (MacOS X) als

Repository-Browser

■ viele weitere:http://git.or.cz/gitwiki/InterfacesFrontendsAndTools

Page 15: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Git praktisch

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 14

Page 16: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Einrichtung, Erzeugen eines Repositories

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 15

Git für lokale Entwicklung einrichten:git config --global user.name "Jan Dittberner "git config --global user.email \"jan.dittberner@communardo .de"git config --global user.signingkey "0 x4f5ba649 "

Repository anlegen in einem beliebigen Verzeichnis:git init

Dateien hinzufügen und eincheckengit add .git commit -m "mein erster Commit "

Page 17: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Repositories klonen

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 16

Repository über SSH klonen, damit wird die Verbindung zumRemote-Repository als Quelle vermerkt.git clone ssh :// user@host :/ repodir/project.gitZum Klonen erlaubt git verschiedene Mechanismen: ssh,git-eigenes Protokoll, rsync, http, https, Dateipfade. Bei httpund https ist nur ein lesender Zugriff möglichFolgendes Kommando holt neue Änderungen vomRemote-Repository in ein lokales Repository:git pull

Page 18: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Arbeiten mit Branches

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 17

Branches und Tags sind bei git anders als z.B. bei Subversionnicht einfach Kopien eines Arbeitsstandes.Branch erstellen:git branch <branchname >Branch erstellen und auschecken:git checkout -b <branchname >Branches auflisten:git branch

Page 19: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Mergen von Änderungen, Aktualisierungen vonBranches

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 18

Änderungen aus einem Branch in den Hauptzweig master(entspricht trunk bei SVN) übernehmen:git checkout mastergit merge <branch >

Um einen Branch, der z.B. für ein Feature angelegt wurde aufden aktuellen Stand des master-Branches zu bringen:git checkout <branch >git rebase masterBei vielen lokalen Commits kann es sinnvoll sein, diesezusammenzuführen. Die letzten 3 Commits können z.B. sozusammengeführt werden:git rebase -i HEAD ~3

Page 20: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Tags

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 19

Ein Tag ist ein symbolischer Name für einen bestimmtenZustand eines Branches, also einen Commit. Tags könnenmit einer PGP-Signatur versehen werden.Tag erstellen mit Signatur:git tag -s release_1 .1

Page 21: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Umgang mit History

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 20

Letzte Versionen anzeigen lassen:git log

Unterschiede zum letzten commiteten Stand anzeigenlassen:git diff

Besonders gut lässt sich die Versionshistorie z.B. mitgitk/gitg/gitx visualisieren.

Page 22: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Patches

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 21

■ bei vielen OpenSource-Projekten werden Bugfixes inForm von Patches weitergegeben und ggf. in dasHauptrepository übernommen

■ Git unterstützt dies mit den format-patch und amUnterkommandos

Patches für die letzten 3 Änderungen erzeugen:git format -patch HEAD ~3.. HEAD

Page 23: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

SVN-Integration

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 22

■ SVN-Repositories lassen sich über das Subkommandosvn von Git nutzen1

■ Vorteile: lokale Version der kompletten Historie, offlinearbeiten möglich, schnelle Diffs

SVN-Repository klonen:git svn clone -s <repourl > <pfad >Updates von SVN-Repository holen:git svn fetchÄnderungen ins SVN übertragen:git svn dcommit

1funktioniert unter Windows noch eher schlecht

Page 24: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Trac-Integration

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 23

■ das GitPlugin [5] für Trac erlaubt Git- stattSVN-Repositories

■ über pre-receive und post-receive-Hooks [6] kann einGit-Repository mit einer Trac-Installation interagierenund z.B. Tickets schließen oder Kommentare zu diesenhinzufügen

Page 25: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

weitere Integrationen

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 24

■ Maven http://maven.apache.org/scm/git.html■ JIRAhttp://confluence.atlassian.com/display/JIRAEXT/Jira+Git+Plugin

■ Hudsonhttp://wiki.hudson-ci.org/display/HUDSON/Git+Plugin

Page 26: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Referenzen

VerteilteVersionsverwaltung

Git

Git praktisch

Start mit Git

Repositories klonen

Branches

Merge

Tags

Umgang mit History

Patches

SVN-Integration

Trac-IntegrationweitereIntegrationen

Referenzen

Diskussion/Fragen

Seite 25

[1] http://www.git-scm.com/

[2] http://www.git-scm.com/documentation[3] SourceForge Git Hosting

[4] http://github.com/[5] http://trac-hacks.org/wiki/GitPlugin

[6] Commithooks von John Goerzen

Page 27: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

VerteilteVersionsverwaltung

Git

Git praktisch

Diskussion/Fragen

Seite 26

Vielen Dank für Eure Aufmerksamkeit.Gibt es Fragen?

Page 28: Verteilte Versionskontrolle mit Git

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ [email protected] ⋅ www.communardo.de

Kontakt

VerteilteVersionsverwaltung

Git

Git praktisch

Diskussion/Fragen

Seite 27

Jan DittbernerSoftware Architekt und Debian Developer

Communardo Software GmbHKleistraße 10aD-01129 [email protected]