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