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.
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