Verteilte Versionsverwaltungssysteme
Sven-S. Porst • porst@sub.uni-goettingen.de
Wir lieben Versionsverwaltung
• Dokumentation:
• Commits: Was? Wann? Wer?
• Commit Messages: Warum?
• Referenzierbarkeit
• Blame
• Branching
• für einzelne: gut – für Kooperationen: notwendig
Versionsverwaltungssysteme
• Dateien & Ordner
• 1990er: CVS
• 2000er: SVN
• 2010er: verteilte Versionsverwaltungssysteme
• bzr (Bazaar) – 2007, Launchpad [Ubuntu, MySQL, GNU]
• git – 2005, github [Linux-Kernel, Android, Rails]
• hg (Mercurial) – 2005, bitbucket [Mozilla, NetBeans, Java…]
Probleme zentraler Versionsverwaltungssysteme
• ohne Kontakt zum Repository geht nichts:
• kein checkout
• kein commit
• keine neuen Branches
• speziell bei SVN:
• den Baum locken ist meist unpraktisch oder wird vergessen
• beim Mergen fluchen dann alle
Der verteilte Ansatz
• keine Abhängigkeit von zentralem Server:
• jeder hat seine eigene Version des Repositories
• Commits können zwischen Versionen des Repositories ausgetauscht
werden
• keine fortlaufenden Revisionsnummern möglich
• Fokus auf Änderungen statt Dateien
git
• Arbeitsablauf:
• Repository einrichten: init
• Repositoryzustand laden: checkout
• Coden
• Ergebnisse zusammenstellen »stagen«: add
• Commiten: commit
• Repositoryzustand senden: push
git
• Versionen:
• Commit-IDs sind Hashes aus Commit-Inhalt und Metadaten
➡ keine Manipulation möglich
➡ Versionsfolge nicht aus den IDs ersichtlich
• Die Metadaten enthalten die ID der Vorgängerversion(en)
Beispiel: Clonen (init + remote + fetch + checkout)
ssp% git clone https://github.com/laullon/gitx.git
Cloning into gitx...
remote: Counting objects: 8404, done.
remote: Compressing objects: 100% (3000/3000), done.
remote: Total 8404 (delta 5598), reused 7768 (delta 5142)
Receiving objects: 100% (8404/8404), 8.90 MiB | 594 KiB/s,
done.
Resolving deltas: 100% (5598/5598), done.
Beispiel: Änderungen committen
• Code Bearbeiten
• Code Committen, auch ohne Kontakt zum Server
% git add .
% git commit -m "Commit Message"
[master 67c5136] Commit Message
1 files changed, 700 insertions(+), 826 deletions(-)

• Wenn gewünscht, Code Bereitstellen mit git push …
(benötigt Kontakt zum Server)
git Tools: git gui
git Tools: gitk
git Tools: github.com
git Tools: GitX auf dem Mac
Zusammenfassung
• Verteilte Versionsverwaltungssysteme bieten:
• einfacheres dezentrales Arbeiten (Büro, Home, Laptop)
• Funktionalität auch ohne Verbindung zum Server
• Branchen und Mergen als natürliche Handlung
• Mehr Freiheiten und weniger Schmerz bei der Entwicklung
➡ Mehr Experimentierfreude
Propaganda
• Download & Dokumentation: http://git-scm.com/
• gut lesbare Anleitungen: http://progit.org
• Torvalds Talk bei Google: Googlen nach »Torvalds git«
• erstaunlich gut: die man-Pages (mit Bindestrich: z.B. man git-pull)
• Ausprobieren!

git Vorstellung

  • 1.
  • 2.
    Wir lieben Versionsverwaltung •Dokumentation: • Commits: Was? Wann? Wer? • Commit Messages: Warum? • Referenzierbarkeit • Blame • Branching • für einzelne: gut – für Kooperationen: notwendig
  • 3.
    Versionsverwaltungssysteme • Dateien &Ordner • 1990er: CVS • 2000er: SVN • 2010er: verteilte Versionsverwaltungssysteme • bzr (Bazaar) – 2007, Launchpad [Ubuntu, MySQL, GNU] • git – 2005, github [Linux-Kernel, Android, Rails] • hg (Mercurial) – 2005, bitbucket [Mozilla, NetBeans, Java…]
  • 4.
    Probleme zentraler Versionsverwaltungssysteme •ohne Kontakt zum Repository geht nichts: • kein checkout • kein commit • keine neuen Branches • speziell bei SVN: • den Baum locken ist meist unpraktisch oder wird vergessen • beim Mergen fluchen dann alle
  • 5.
    Der verteilte Ansatz •keine Abhängigkeit von zentralem Server: • jeder hat seine eigene Version des Repositories • Commits können zwischen Versionen des Repositories ausgetauscht werden • keine fortlaufenden Revisionsnummern möglich • Fokus auf Änderungen statt Dateien
  • 6.
    git • Arbeitsablauf: • Repositoryeinrichten: init • Repositoryzustand laden: checkout • Coden • Ergebnisse zusammenstellen »stagen«: add • Commiten: commit • Repositoryzustand senden: push
  • 7.
    git • Versionen: • Commit-IDssind Hashes aus Commit-Inhalt und Metadaten ➡ keine Manipulation möglich ➡ Versionsfolge nicht aus den IDs ersichtlich • Die Metadaten enthalten die ID der Vorgängerversion(en)
  • 8.
    Beispiel: Clonen (init+ remote + fetch + checkout) ssp% git clone https://github.com/laullon/gitx.git Cloning into gitx... remote: Counting objects: 8404, done. remote: Compressing objects: 100% (3000/3000), done. remote: Total 8404 (delta 5598), reused 7768 (delta 5142) Receiving objects: 100% (8404/8404), 8.90 MiB | 594 KiB/s, done. Resolving deltas: 100% (5598/5598), done.
  • 9.
    Beispiel: Änderungen committen •Code Bearbeiten • Code Committen, auch ohne Kontakt zum Server % git add . % git commit -m "Commit Message" [master 67c5136] Commit Message 1 files changed, 700 insertions(+), 826 deletions(-) • Wenn gewünscht, Code Bereitstellen mit git push … (benötigt Kontakt zum Server)
  • 10.
  • 11.
  • 12.
  • 13.
    git Tools: GitXauf dem Mac
  • 14.
    Zusammenfassung • Verteilte Versionsverwaltungssystemebieten: • einfacheres dezentrales Arbeiten (Büro, Home, Laptop) • Funktionalität auch ohne Verbindung zum Server • Branchen und Mergen als natürliche Handlung • Mehr Freiheiten und weniger Schmerz bei der Entwicklung ➡ Mehr Experimentierfreude
  • 15.
    Propaganda • Download &Dokumentation: http://git-scm.com/ • gut lesbare Anleitungen: http://progit.org • Torvalds Talk bei Google: Googlen nach »Torvalds git« • erstaunlich gut: die man-Pages (mit Bindestrich: z.B. man git-pull) • Ausprobieren!