Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Git vs. SVN

Git vs. SVN

Mein Talk von der DevCon Hamburg in 2011

Mario Mueller

April 27, 2012
Tweet

More Decks by Mario Mueller

Other Decks in Technology

Transcript

  1. Wer bin ich? • Mario Müller (@xenji) • TWT Interactive

    GmbH - Düsseldorf • Java, PHP, Python, Groovy • FirstSpirit, JEE, Zend Framework, Oxid • NoSQL FTW! • Mac-Head & Linux Enthusiast • Github: http://github.com/xenji
  2. 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
  3. 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
  4. VCS Survey (von M. Fowler) Approval in % • 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)
  5. SVN

  6. Geschichte • Version 1.0 am 20. Oktober 2000 • Enwickelt

    von CollabNet • Seit dem 10. Feb. 2010 ein Apache Top- Level Projekt • Weiterentwicklung vom ebenfalls zentralen Versionierungstool „CVS“
  7. Vorteile • Kostenfrei erhältlich • Erprobt im OpenSource- und Unternehmens-

    alltag • Stetige Entwicklung als Apache Projekt gesichert • Hohe Akzeptanz • Unterstützt von vielen IDEs, Clients und Project Hosting Anbietern (z. B. SourceForge) • Einfache Handhabung • Authc & Authz abbildbar
  8. Einschränkungen • Ohne Server geht nichts • Es werden nur

    Deltas verwaltet • Automatisches Mergen ist in vielen Fällen keine schöne Erfahrung • Jeder Commit muss einzeln gemergt werden
  9. Git

  10. 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
  11. Geschichte • Gestartet im April 2005 um den damals verwendeten

    BitKeeper zu ersetzen • Aktuell in der Version 1.7.x verfügbar • Schnell adaptiert worden (GitHub, Gitorious)
  12. 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.
  13. 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.
  14. 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“
  15. 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 Commit‘ed
  16. 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“ • Explizites „ziehen“ ist möglich -> nur „master“, nur „2.1.0“, nur „testing“
  17. 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
  18. Vorteile • Schnell, da eine Vielzahl der Operationen lokal ist

    • Unabhängig, da kein Server benötigt wird • Sicher, da jeder alles besitzt (= verteiltes Backup) • Objekt-orientierte Sichtweise auf die Teilstücke des Versionsbaumes • Vollkommene Freiheit, da jeder sich selbst organisieren kann.
  19. Einschränkungen • Autorisierung per SSH unter Windows nur per PuTTY

    - Toolbox • Einsatz unter Windows nur per mingw • Kaum gute GUIs oder IDE Plugins • „Ungemütliche Lernkurve“ • Vollkommene Freiheit
  20. 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 mögliche Workflows dokumentiert (http: //wiki.bazaar.canonical.com/Workflows) • Hier stelle ich 3 Modelle beispielhaft vor
  21. 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
  22. 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
  23. 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 lohnt sich erst bei 50+ Personen
  24. Anforderungen an Git im Unternehmen • Authentifizierung (LDAP, ADS, etc)

    • Autorisierung (Gruppen, Rollen, Rechte) • Automatisierte Backups • Support • Akzeptanz
  25. Authentifizierung • Ist mit Linux - Bordmitteln anstrengend • Gitosis

    und Gitorious bieten Hilfe • Integrierte directory-basierte Lösungen sind keine Vorhanden • HTTP Push ermöglicht jedoch Autorisierung per Webserver • Erweiterte Authentifizierung kann man per Hooks hacken
  26. Autorisierung • Gitosis oder Gitorious helfen, man verlagert aber nur

    die Aufgabe • Keine Mechanismen implementiert • Implementierung per Post-Commit / Post-Push Hooks
  27. Backups • Option 1: Einfach kopieren • Option 2: git

    fast-export --all mmue-mbp:ProwlPHP mario$ git fast-export --all | less commit refs/heads/mastermark :281author Mario Mueller < mario. [email protected] > 1305968206 +0200committer Mario Mueller <[email protected] > 1305968206 +0200data 55Res olved #6, but need some relyability fixing later onfrom :279M 100644 :280 src/Prowl/Connector.php
  28. Bazaar • Von Canonical (Ubuntu) • in Python geschrieben •

    Aktivste Plattform: Launchpad • Einfacher in der Handhabe • Gefühlt langsamer als Git
  29. Mercurial • Wir seit Q4 2010 von Atlassian weiter entwickelt

    • Ist ebenfalls in Python geschrieben • Aktivste Plattform: Bitbucket, Google Code • Ist einfacher als Git, einfacher als Bazaar • Performanter als Bazaar, wenig langsamer als Git