Nach Jahren der Stagnation eröffnen verteilte Systeme neue Perspektiven der Kollaboration
Versionskontrollsysteme (DVCS) waren lange Zeit eine Domäne von Programmierern und Systemadministratoren, gewinnen aber in letzter Zeit auch zunehmend Bedeutung für andere kreative und kollaborative Tätigkeiten. Nachdem sich lange Zeit nur zentralistische Systeme wie CVS und Subversion auf dem Markt befanden, kommt jetzt eine neue Generation verteilter Systeme auf, die neue Voraussetzungen schaffen. Im Gespräch mit Tim Pritlove führt hukl in die Prinzipien der verteilten Versionskontrolle ein und bringt zahlreiche Beispiele, wie Entwicklung und Kollaboration durch neue Werkzeuge wie git, mercurial oder bazaar vorangebracht werden können.
Themen: Online und Offline arbeiten, die Vereinfachung von Forks, warum man Verteilte Versionskontrolle für den Friedensnobelpreis vorschlagen könnte, verlustfreie Vergangenheitserfassung, Interoperabilität von verteilen Versionskontrollsystemen, Integration mit alten Infrastrukturen, Social Coding und neue Kollaborationsstrukturen beim Programmieren, Verwendung von DVCS zur gemeinsamen Erarbeitung von Büchern, Nachträgliches Ändern der Versionsgeschichte, Migrationsstrategien.
John "hukl" Bader
GitHub
Twitter
Tim Pritlove
Twitter
Website
Spenden via PayPal
Max Merz
(Shownotes)
Pinboard
Twitter
Shownotes
Intro CRE Intro Begrüßung Version Control Distributed Version Control hukl Geschichte Softwareentwicklung Systemadministration Konfigurationsdateien Versionsnummer Versionskontrollsystem CVS “Kupferstandard” (Tim) Klondike “Als man mit seinen 2 mal 80MB-Festplatten noch der Held der Straße war.” (Tim) Unix SCCS RCS VMS Virtual Address eXtension (VAX) Dateisystem Sysadmins nutzen immer noch RCS rc.conf Firewall FreeBSD Punktverzeichnisse OpenBSD Open BSD OpenCVS Über hukl Apple Macintosh Performa 6200CD FreeHand Director CCC Modem 1&1 Treiber AT-Befehle Subversion (SVN) Branch Merge RCS, CVS, SVN CVS war der heiße Scheiß nach RCS RCS hat nur in einem Verzeichnis versioniert CVS geht von mehreren Mitarbeitern aus Mehrbenutzersystem Terminal Repository SSH Tunnel CVS ist nicht Internet-aware, kann man aber trotzdem über Internet machen RCS war Single-User Konflikt Locking Merging Cygnus Solutions Cygnus Solutions TCP/IP Die allwissende Müllhalde GCC das Interessante war die Kollaboration “Aber: CVS nervt.” (Tim) Verschieben von Verzeichnissen war schmerzhaft mit CVS “Subversion war dann eben so das Durchatmen nach 10 Jahren” (Tim) RCS und CVS konnten nur Text, SVN auch Binaries CVS war 10 Jahre lang alleine auf dem Markt Commits in CVS waren non-atomic Commit Subversion hat das Prinzip von CVS vollendet Time Machine Rollback SVN ist Internet-aware Was macht ein Versionierungssystem? Ursprung der Versionierung diff patch Fix “Ich bin heut voll dabei irgendwie. Ich muss heut einfach mal die Klondike abdecken, aber gleich steig ich aus.” (Tim) Branches CVS mit Client-Server-Struktur CVS hat zentrales Repository Arbeitsablauf bei CVS Commit Arbeitskopie (“working copy”) Vorteil von CVS Konflikte und Konfliktmanagement ein Beispiel zu Konflikten mit Alice und Bob und Larry und Sally Alice und Bob Branches “Man muss sich halt einfach Softwareentwicklung vorstellen wie ein Bäumchen und das Bäumchen soll irgendwie wachsen.” (Tim) Baum Trunk Refactoring Merge Kategorie 1/3: Versionskontrollsystem hat keine Probleme beim Mergen SVN schafft ab und zu einen Merge auch mal alleine Library Kategorie 2/3: Konflikte aufgrund der Architektur des Versionskontrollsystems moderne Versionskontrollsysteme tracken den Inhalt der Dateien anstatt der Dateien selbst Probleme von SVN Anekdote: einen Tag lang Merge-Konflikte beheben Warum ist Mergen so schmerzhaft? Hardlink Linus Torvalds git “Branchen – who cares? Das Schwierige ist das Mergen.” (hukl) SVN kann nicht so wirklich gut mergen Merge Tracking Anekdote von Tim SVN hatte Probleme mit der Datenstruktur Berkeley DB Files tracken vs. Content tracken zentrale Versionskontrollsysteme haben Kollaboration vereinfacht SVN hat seine Kinderkrankheiten hinter sich Git Git BitKeeper SVK Mercurial Bazaar GNU arch Monotone Larry McVoy Linux Kernel Was kann git denn besser? Ruby on Rails "Es gibt nichts was SVN besser macht als ein dezentrales Repository." (hukl) Distributed Version Control Single Point of Failure Google Code Mercurial Support bei Google Code “In dem Moment, wo die Google-Server abbrennen, ist deine ganze History weg” (hukl) “But Google never fails!” (Tim) Geschwindigkeit Quantensprung Bei SVN ist für jede Operation eine Verbindung zum zentralen Repository notwendig Transaktion Initialer Checkout von Git dauert länger als SVN Git spart Platz und ist nach dem initialen Checkout erheblich schneller “Wenn du das einmal erfahren hast, dass alles einfach fast instantan geht, dann willst du da nicht mehr zurück.” (hukl) Interne Datenstruktur von Git Ein einziger .git-Ordner im Top-Level-Verzeichnis Vier Git Objects Git Blob (Binary Large OBject) gzip bzip Dateiname des Blobs ist Hash über Inhalt der Datei SHA1-Hash Git Tree Object Git Commit Object Jeder Commit referenziert ein Top-Level Tree Object ZFS Git Tag Object Tags referenzieren Commits Durch SHA1 hat man auch gleich Prüfsummen Branching: Jeder Commit hat einen Parent Commit Aus Merge resultierender Commit hat zwei Parents Git und Mercurial können deshalb besser mergen Hashfunktion Tim fasst zusammen Auch bei Git gibt es Konflikte, aber weniger unnötige Auswirkungen der Datenstruktur Speicherplatzbedarf Commit-Rechte Fork “Wenn man ein Projekt da betreut hat und irgendjemand hat gesagt: ‘Ich mache einen Fork!’” (hukl) “Das war eine Kampfansage.” (Tim) “Bei dezentralen Systemen ist forken cool.” (hukl) IRC GitHub Pull Request Tim kann es kaum fassen Git Clone Patch Forken und Mergen sind erwünscht und einfach “Distributierte Versionskontrollsysteme könnte man in der Softwarewelt schon fast für den Friedensnobelpreis vorschlagen.” (Tim) Bei dezentralen Systemen ist jedes Repository ist technisch gleichberechtigt Abandonware “Eigentlich ist das so ein bisschen Open Source++.” (Tim) Keine Netzwerkverbindung notwendig Identifikation von Commits Unterschiede zwischen Repositories Lokale und Remote Branches “Also Mercurial und Git sind sehr sehr sehr sehr ähnlich. Das, was ich über Git sage, ist zu 98,5% auch wahr für Mercurial.” (hukl) Git Pull Unterschiede bei Branches zwischen Git und Mercurial Unterschiede beim Interface zwischen Git und Mercurial Marktanteil Git vs. Mercurial Dateinamen ändern Bazaar Unterschiede zwischen Git, Mercurial, Bazaar? Die enormen Vorteile gegenüber SVN sind bei allen dreien gegeben Bazaar haben am Anfang Features gefehlt Git und Mercurial sind dann zur gleichen Zeit aus der gleichen Motivation heraus entstanden Bazaar hat danach aufgeholt Eigentlich sind sich jetzt alle sehr ähnlich Bitbucket Launchpad Was leisten diese Seiten? Zugriffsrechte verwalten Soziale Komponente Wikipedia Wikipedia Dump “Ein Rausch, der da ausgebrochen ist mit diesem Forken und Mergen und Pushen und Pullen und Messages Senden und Watchen und…” (hukl) Hukl meint, es hilft der Software-Qualität Der Maintainer kann das Auflösen der Merge-Konflikte an den Contributor delegieren Andere Anwendungsfälle Pro Git OmniGraffle Markdown Pro Git Repository CMS GitFS Synchronisation und Deployment Weitere Features Git’s Pluggable Merge Strategies Git’s Octopus Branch Strategy Binary Diffs JPEG MP3 ID3-Tag History Rewriting Commits zusammenfassen Commits umordnen Commits löschen Wie funktioniert der Umzug? “Jetzt bin ich irgendwie total überzeugt, distributet ist da shit.” (Tim) Fall: Arbeitgeber benutzt SVN und will nicht wechseln Git/Mercurial können mit SVN reden SVK Mercurial kann mit Git reden Fall: Einzelner Nutzer will nicht wechseln Git Daemon SVN Import Die eigentliche Hürde ist das Umdenken Matrix Verteilte Versionskontrolle macht viel mehr Spaß InDesign git-init Git GUI gitk IDE Eclipse Mit Git kann man Vieles noch retten Blick in die Zukunft Git User Survey 2009 hukl fällt nichts ein File Permissions Versionskontrolle auf alles anwenden SubEthaEdit Google Docs Undo Photoshop Time Machine Git Dokumentation Pro Git Apress Pro Django git-scm Git Community Book Linus Torvalds bei Google Buch von O’Reilly Mercurial Homepage Github Documentation gitready.com Why Git is Better Than X Git Community Git Version 1.6.3.4 Git Version 1.6.4 OpenBSD FreeBSD NetBSD “Da muss man sich echt nicht schämen wenn man Mercurial oder Bazaar jetzt benutzt.” (hukl) “Schämen muss man sich nur, wenn man noch CVS benutzt.” (Tim) Abschluss @hukl @timpritlove Distributed Version Control Aufruf zum Kommentieren CRE Outro