Verteilte Versionskontrolle mit Git

Post on 19-Jun-2015

2.312 views 0 download

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

GoBack

Seite 1

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ www.communardo.de

Seite 2

Verteilte Versionsverwaltungmit git

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

Jan Dittberner <jan.dittberner@communardo.de>

29.09.2009

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ www.communardo.de

Verteilte Versionsverwaltung

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 3

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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)

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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)

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ www.communardo.de

Historie - dezentrale Systeme

VerteilteVersionsverwaltung

Historie

Vorteile

Nachteile

Git

Git praktisch

Diskussion/Fragen

Seite 6

■ BitKeeper

■ Mercurial (hg)

■ Bazaar (bzr)

■ Git

■ Darcs

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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?)

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ www.communardo.de

Git

VerteilteVersionsverwaltung

GitHerkunft undVerbreitung

Warum Git?

Verfügbarkeit

Toolunterstützung

Git praktisch

Diskussion/Fragen

Seite 9

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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.

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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/

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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/

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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 "

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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.

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ 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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ www.communardo.de

VerteilteVersionsverwaltung

Git

Git praktisch

Diskussion/Fragen

Seite 26

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

c⃝ Communardo Software GmbH ⋅ Fon +49 (0) 351 833820 ⋅ info@communardo.de ⋅ www.communardo.de

Kontakt

VerteilteVersionsverwaltung

Git

Git praktisch

Diskussion/Fragen

Seite 27

Jan DittbernerSoftware Architekt und Debian Developer

Communardo Software GmbHKleistraße 10aD-01129 Dresdenjan.dittberner@communardo.de