Git vs SVN - Eine vergleichende Einführung
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Git vs SVN - Eine vergleichende Einführung

  • 92,289 views
Uploaded on

Mein Vortrag über Git und SVN bei der Düsseldorf/Krefeld/Duisburg - PHP UserGroup

Mein Vortrag über Git und SVN bei der Düsseldorf/Krefeld/Duisburg - PHP UserGroup

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
92,289
On Slideshare
89,352
From Embeds
2,937
Number of Embeds
28

Actions

Shares
Downloads
505
Comments
0
Likes
22

Embeds 2,937

http://atlassian.icidogroup.icido.com 1,232
http://bueltge.de 1,164
http://cduu.wordpress.com 224
http://www.thewebhatesme.com 132
http://xenji.com 58
http://steffanweb.com 34
http://10.0.0.22 15
http://www.xenji.com 12
http://flavors.me 12
url_unknown 7
http://www.slideshare.net 7
http://blogs.xenji.com 6
http://static.slidesharecdn.com 4
http://www.mariomueller.name 4
http://www.linkedin.com 3
http://forum.xcript.de 3
http://localhost 3
http://feeds.feedburner.com 2
http://s3.amazonaws.com 2
https://www.linkedin.com 2
http://www.ur4ur.com 2
http://webcache.googleusercontent.com 2
http://coderwall.com 2
http://www.shockdom.com 1
http://anonymouse.org 1
https://cduu.wordpress.com 1
http://www.pearltrees.com 1
http://127.0.0.1 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Prot. von &#xC4;nderungen <br /> Dauerhafte Archiv. <br /> Wiederherst. im Ernstfall oder auch um zu vergleichen! <br />
  • Prot. von &#xC4;nderungen <br /> Dauerhafte Archiv. <br /> Wiederherst. im Ernstfall oder auch um zu vergleichen! <br />
  • Prot. von &#xC4;nderungen <br /> Dauerhafte Archiv. <br /> Wiederherst. im Ernstfall oder auch um zu vergleichen! <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

Transcript

  • 1. 1 Git versus SVN Eine vergleichende Einführung in verteilte Versionskontrollsysteme (VCS) anhand von „Git“ und dem zentralisierten VCS „Subversion“ (SVN) http://bit.ly/PHPUG_JUN_GITvsSVN
  • 2. 2 Wer bin ich? Mario Müller TWT Interactive GmbH - Düsseldorf PHP (ZCE), Javascript, Python, Java Webservices, verteilte Systeme, Build Systeme, Frameworks MySQL, Postgresql, CouchDb, MongoDb Mac-Head & Linux Enthusiast Xing: http://bit.ly/mariomueller Twitter: http://twitter.com/xenji Github: http://github.com/xenji
  • 3. 3 Agenda Versionierung Warum? Lokal Zentral Dezentral
  • 4. 4 Agenda SVN Geschichte Begriffe Funktionsweise Vorteile & Einschränkungen Alleinstellungsmerkmale
  • 5. 5 Agenda Git Geschichte Begriffe Funktionsweise Vorteile & Einschränkungen Workflow & Team Organisation
  • 6. 6 Agenda Gegenüberstellung Vorteile & Nachteile Fazit Fragen Quellen
  • 7. 7
  • 8. 8 #1 Versionierung
  • 9. 9 Warum Versionierung? Protokollierung Archivierung Wiederherstellung
  • 10. 10 Lokale Versionierung
  • 11. 11 Merkmale Alle Arbeiten sind lokal Es gibt immer nur eine Realität Die Versionshistorie ist lokal Dateien werden als Ganzes versioniert Vergleiche sind möglich Performanz ist gut
  • 12. 12 RCS - Revision Control System Dateibasiertes Unix & Linux VCS Sehr alt (Anfang der 1980er) und $ ci -u PyChart-1.26.1.tar.gz PyChart-1.26.1.tar.gz,v <-- PyChart-1.26.1.tar.gz Vorgänger von CVS, welches immer noch enter description, terminated with single '.' or end of file: die gleiche Methode zur Dateiverwaltung NOTE: This is NOT the log message! >> Init Checkin >> . verwendet initial revision: 1.1 done Wird heute teilweise noch von Sys- Admins eingesetzt um Konfigurationen zu sichern Speichert immer den gesamten Dateistand (kein Delta).
  • 13. 13 Zentrale Versionierung
  • 14. 14 Merkmale Es gibt mehr als eine Realität (ein Server, n Workingcopies) Revisionen werden zentral verwaltet, Versionsnummern zentral vergeben Vergleiche sind nur direkt mit dem Server möglich Häufig wird ein Delta-basiertes Speicherverfahren verwendet, so bleiben die zu übertragenden Mengen gering Die Versionshistorie ist nur auf dem Server verfügbar Die Zentralisierung ermöglicht ein Zugriffs- und Rechtemanagement
  • 15. 15 Dezentrale Versionierung
  • 16. 16 Merkmale Es gibt viele, mehrdimensionale Realitäten (Multi-Master, Multi- Workingcopy) Jede Workingcopy ist ein kompletter Klon mit allen Versionen Theoretisch gibt es keinen zentralen Server Das Repository ist lokal und unabhängig Alle Operationen sind lokal Es ist ein Mechanismus zur Synchronisierung mit einer entfernten Instanz vorhanden
  • 17. 17 • Active Responses: The total of responses excluding "No Opinion". (eg for git: 65 + 19 + 1 + 0) • Approval %: The sum of best and ok responses divided by active responses, expressed as a percentage. (eg for git: (65 + 19) / 85) Approval in % VCS Survey (von M. Fowler)
  • 18. 18 #2 SVN - Subversion
  • 19. 19 Geschichte 4 Jahre Entwicklung - Version 1.0 am 23. Feb. 2004 Enwickelt von CollabNet Seit dem 10. Feb. 2010 ein Apache Top- Level Projekt Weiterentwicklung vom ebenfalls zentralen Versionierungstool „CVS“
  • 20. 20 Begriffe Revision Changeset Delta / Diff Merge Branch Tag
  • 21. 21 Revision im Bereich der elektronischen Archivierung, insbesondere im Rahmen der Archivierung kaufmännischer Daten, für Nachprüfbarkeit, Unveränderbarkeit, Nachvollziehbarkeit (Wikipedia)
  • 22. 22 Changeset Eine Zusammenfassung von Änderungen einer Version. Häufig wird eine Notation verwendet, die die Operation mit / auf dem Bestandteil des Changesets erklärt: U = Updated D = Deleted A = Added Beispiel für ein Changeset: U foo.txt A bar.sh D baz.php
  • 23. 23 Delta / Diff Das griechische Delta (∆) wird häufig für die Benennung von Differenzen verwendet. Im Fall von SVN handelt es sich sogar um das angewandte Speicherverfahren. Es werden immer nur die Unterschiede zwischen zwei Versionen festgehalten.
  • 24. 24 Tag Ein Tag ist eine Beschriftung einer bestimmten, einzelnen Revision. Man markiert einen definierten Stand mit einem Zeiger. Das Taggen eine „günstige“, wenig Ressourcen - verbrauchende Operation. Häufig wird das Taggen für die Defintion von Versionen verwendet. Tags werden als unveränderlich betrachtet, sind es aber de-facto in SVN nicht.
  • 25. 25 Branch Ein Branch (= Ast) ist meist eine Ab-/Verzweigung einer Hauptentwicklungslinie (meist „trunk“ genannt). In SVN sind Branches Kopien von einer Ursprungsversion (In SVN über sog. „Cheap Copies“ realisiert). Häufig werden Branches dazu verwendet um verschiedene Versionsstände von einander zu trennen oder um Arbeitsabläufe zu parallelisieren. Bsp: trunk -> latest-test oder latest-test -> latest-production
  • 26. 26 Merge Das Mergen oder Verschmelzen ist die Zusammenführung von verschiedenen Änderungen in zwei Versionen einer Datei oder auch eines Dateibaumes. Bekanntes Beispiel ist das Mergen von zwei Branches
  • 27. 27 Funktionsweise (Beispiel) touch foo.bar svn add foo.bar svn commit foo.bar -m „Initial checkin“ echo „baz“ > foo.bar svn commit foo.bar -m „Added baz“
  • 28. 28 Eine SVN Timeline
  • 29. 29 Vorteile Kostenfrei erhältlich Erprobt im Alltag Modern durch stetige Entwicklung als Apache Project Akzeptiert von den meisten Entwicklern Unterstützt von vielen IDEs, Clients und Shared Hosting Anbietern (z. B. SourceForge) Einfach in der Handhabung Komplexe Szenarien sind abbildbar.
  • 30. 30 Einschränkungen Viele Operationen sind aus Datenhaltungssicht „teuer“ Ohne Server geht nichts Es werden nur Deltas verwaltet Automatisches Mergen ist in vielen Fällen keine schöne Erfahrung (= viele Konflikte bei offensichtlich eindeutigen Situationen)
  • 31. 31 Alleinstellungsmerkmale Properties auf Datei / Verzeichnisebene svn:externals um entfernte Repositories „hineinzulinken“
  • 32. 32 #3 Git
  • 33. 33 Wer hat‘s erfunden?
  • 34. 34 Linus Torvalds Initiator der Linux - Bewegung Wahrscheinlich der berühmteste Entwickler der heutigen Zeit Entwickelt aktiv am Linux Kernel Ist Erfinder von Git, jedoch nicht (mehr) der Hauptentwickler
  • 35. 35 Geschichte Gestartet im April 2005 um den damals verwendeten BitKeeper zu ersetzen von Linus Torvalds Aktuell in der Version 1.7 verfügbar Sehr junges Projekt Schnell adaptiert worden (GitHub, Gitorious)
  • 36. 36 Besonderheit: Merge Gedächtnis Nach dem Merge weiss Git wer „seine Eltern sind“
  • 37. 37 Einige Zeit nach PHP 5 Branch PHP 4 Branch Erstellung des PHP 5.3 Branches wird ein Fehler festgestellt. Dieser Fehler wird im 5.3er Branch gefixt, wo muss er denn PHP 5.3 Branch noch gefixt werden? Fehler! Für Git kein Problem, Woher? da es den Ursprung Bugfix übertragen der Datei und deren Einzelteile kennt. Die Historie verrät wo der Fehler herkommt.
  • 38. 38 Begriffe Staging Rebase Pull Dirty Remote Clone Push
  • 39. 39 Clone Unter einem „Clone“ versteht man das Spiegeln einer vollständigen Historie in ein (lokales) Repository. Dabei wird jeder Commit, jeder Tag und jeder Branch mit einbezogen.
  • 40. 40 Remotes Branches werden in Git in zwei Zuständen verwaltet. Lokal und Remote. Ein Remote Branch ist eine Referenz auf einen lokalen Branch in einem entfernten Repository. Remotes werden interessant, wenn mehrere Entwickler am selben Branch arbeiten und den entwickelten Quellcode verteilen wollen.
  • 41. 41 Staging Hinzufügen von Dateien in einen virtuellen Bereich Alle Daten im Stage kommen in den nächsten Commit Commits sind dadurch auf CLI Ebene „zusammenbaubar“
  • 42. 42 Push Übermittelt den Inhalt eines Branches aus einem lokalen Repository an ein Remote Repository Transferiert Commit-By-Commit Aus Sicht des Remote Repositories sieht es aus, als hätte die Person lokal Commited
  • 43. 43 Pull „Zieht“ Änderungen aus einem Remote Repository Wenn mehrere Branches aus einem Remote existieren (z. B. nach einem Clone eines Repositories mit mehreren Branches), werden diese ebenfalls „gezogen“
  • 44. 44 Rebase Ähnelt dem Pull Zieht alle entfernten Änderungen in das lokale Repository läuft bis zu dem Punkt, in der Timeline, ab dem man selbst Veränderungen vorgenommen hat Wiederholt ab diesem Zeitpunkt alle Commits bis zum aktuellen Stand. Klarer Unterschied zum Merge: Rebase erzeugt keine neue Revision!
  • 45. 45 Dirty Als „dirty“ bezeichnet man Branches, die Änderungen gegenüber dem letzten Commit besitzen ihre Änderungen noch nicht (vollständig) im Staging haben Beispielkonstellation für den Zustand „dirty“ Foo.txt (tracked, unchanged) Grund für den Zustand „dirty“ Bar.php (tracked, changed, unstaged) Baz.css (tracked, changed, staged)
  • 46. 46 Funktionsweise Git Repositories bestehen aus drei Komponenten: Tree Objekte Commit Objekte Blobs (Binary Large OBjects) Jedes Objekt bekommt eine repository-weit eindeutige ID in From einer SHA-1 Prüfsumme
  • 47. 47 Funktionsweise Alles wird in einem .git Ordner im Wurzelverzeichnis des Repositories gesammelt. (Keine verstreuten .svn Ordner mehr) Dateien werden nach ihrem Inhalt beurteilt, nicht nach ihrem Namen „Renaming-Detection“ ist also eingebaut Kein Linux/Windows „Conflict State“ Problem bei Groß- und Kleinschreibung
  • 48. 48 Arbeitsschritte
  • 49. 49 4-faltigkeit Eine Blob kann aus Sicht von Git vier Zustände annehmen untracked (nicht versioniert) unmodified (versioniert, aber nicht verändert) modified (versioniert, verändert, nicht im Stage) staged (versioniert, verändert und im Stage, aber nicht commited)
  • 50. 50 Multi-Branch Modell
  • 51. 51 Branching Gehört zum täglichen Arbeiten Ein Branch pro Feature / Bugfix / Change Lokales und entferntes Branchen möglich Saubere Fallunterscheidung Sichere Code-Basis, da definierter Stand und Kenntnis über den Ursprung des Stands (jeder Branch kennt den Punkt ab dem er divergiert (abgewichen) ist
  • 52. 52 Vorteile Schnell, da eine Vielzahl der Operationen lokal ist Unabhängig, da kein Server benötigt wird Sicher, da jeder alles besitzt (= verteiltes Backup) Modern, da Objekt-orientierte Sichtweise auf die Teilstücke des Versionsbaumes Vollkommene Freiheit, da jeder sich selbst organisieren kann.
  • 53. 53 Einschränkungen Kaum Möglichkeiten Teilstücke des Codes per ACL einzuschränken Komplizierter Einsatz unter Windows Kaum GUIs oder IDE Plugins „Ungemütliche Lernkurve“ Vollkommene Freiheit
  • 54. 54 Workflow Modelle
  • 55. 55 Team Organisation Es sind verschiedene Ansätze zur Organisation von Teams entstanden Viele sind auch in der zentralisierten Welt vorhanden, aber wenig genutzt Canonical hat mit der Veröffentlichung von Bazaar in Verbindung mit Launchpad sehr gute Arbeit geleistet und diese möglichen Workflows dokumentiert (http:// wiki.bazaar.canonical.com/Workflows) Hier stelle ich 3 Modelle beispielhaft vor
  • 56. 56 Workflow - Ein User Der „Freelancer - Workflow“ Gut für einzelne Programmierer, die Weder Zeit noch Resourcen für das Setup eines SVN Servers haben Schlecht, wenn man kein Backup hat und die Festplatte / das Speichermedium verliert
  • 57. 57 Workflow - kleines Team Es gibt ein „blessed“ Repository, also ein zentrales Repository Jeder klont sich dieses Repository ein mal Ab dann werden Änderungen per push & pull verteilt Sinnvoll für kleine Teams (zwischen 2 und 6 Leuten) mit überschaubaren Commit- Zahlen
  • 58. 58 Workflow - Integration Manager
  • 59. 59 Workflow - (benevolent) Dictator
  • 60. 60 Workflow Integ. Manager / Dictator Für große Teams geeignet Hoher Management-Aufwand Hohe Parallelisierung Sehr guter Zustand des Repository Der Integration Manager lohnt sich ab 10-15 Personen Das Dictator Modell erst bei 50+ Personen
  • 61. 61 Pro & Kontra
  • 62. 62 • Etabliert • Langsam • Schnell • Steiniger Einstieg • Techn. Ausgereift • Historie „dumm“ • Mergen ist sicher • Verlangt einen • Verstanden • Branching ist & einfach Paradigmen- • Unterstützt anstrengend • Branching ist wechsel • Verfügbar • Binärdaten- erwünscht • Nicht auf allen • Rechte- behandlung • Ohne Server OS „gut“ management • Ohne Server verwendbar • Fehlendes unbrauchbar • Sehr intellig. Rechte- Historie management
  • 63. 63 Die richtigen Mittel für den richtigen Zweck
  • 64. 64 Der Umstieg / Lernaufwand lohnt sich ... wenn man selbst OpenSource Software schreibt und diese z. B. auf Github bereitstellen möchte wenn man viel im OpenSource Software Umfeld unterwegs ist, denn Git wird dort immer stärker wenn man große Mengen an Sourcen verwalten muss und Geschwindigkeit eine Rolle spielt wenn SVN mal wieder den Merge verrissen hat und man sehen will wie es auch anders geht wenn man die Definition von „Versionshistorie“ bei SVN auch so mager findet wenn man keine Versionskontrolle nutzt, die Sourcen lokal halten will und SVN Server doofe Ohren haben
  • 65. 65 Vielen Dank für die Aufmersamkeit!
  • 66. 66 Fragen
  • 67. 67 Quellen - lexikalisch ProGit - http://progit.org/book Bazaar Workflows - http:// Wikipedia - http:// wiki.bazaar.canonical.com/ de.wikipedia.org/wiki/Git Workflows Wikipedia - http:// Git-SCM - http://git-scm.com/ de.wikipedia.org/wiki/SVN Subversion - http:// Version Control with SVN - http:// subversion.apache.org/ svnbook.red-bean.com/
  • 68. 68 Quellen - Bilder aboutpixel.de Fragezeichen © Werner Linnemann aboutpixel.de Dialog © schwald-werbegestaltung aboutpixel.de up to date © Bernd Boscolo aboutpixel.de RISIKO! © Braun Alexander ProGit (Workflows) aboutpixel.de öffnen © Rainer Sturm aboutpixel.de Gemarkt © Simon Ledermann aboutpixel.de Zwilling © Rosita Sellmann aboutpixel.de Eierpappe © daylight Bazaar (Workflows) aboutpixel.de StrangZiehen © Sven Schneider aboutpixel.de starkes mädel © regine schöttl aboutpixel.de Partystimmung © Sebastian B. Wikipedia (Logos) aboutpixel.de Verkabelung © Werner Linnemann aboutpixel.de Eierlei... 3 © Steve_ohne_S aboutpixel.de starkes Blatt © Rainer Sturm aboutpixel.de Und die Akten türmen sich... © S. Lingk Diverse Aboutpixel.de Fotografen (siehe aboutpixel.de Wie - Mist? © daylight aboutpixel.de doof hier! © Joana Virck-Alevra Box rechts) aboutpixel.de EXIT © Sven Schneider aboutpixel.de Schalenfrüchte © Nadine Dauwalter aboutpixel.de Zeit sparen © Arnim Schindler aboutpixel.de Tacitus 1 © Heinz Hasselberg Uni-grazt.at (Kanonen auf Spatzen) aboutpixel.de Can u see the difference © Freive aboutpixel.de Pinguin © tina fritze aboutpixel.de Netz © Walter Christ aboutpixel.de Weiche © Tiberius K.