Versionskontrolle mit Git

Lucio Waßill

@Cyberschorsch

Versionskontrolle?
GIT?
DEMO!

Versionskontrolle

Risiken & Chancen

Wie es nicht funktioniert

Was ist Versionskontrolle?

Versionskontrolle ist das Kontrollieren von Änderungen und das Verwalten von Versionen an Dateien

Einfaches Beispiel: Tippfehler

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Webmontag Demo</title>
</head>
<body>
<p>Kleines Beispeil</p>
</body>
</html>

Version 1

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Webmontag Demo</title>
</head>
<body>
<p>Kleines Beispiel</p>
</body>
</html>

Version 2

Beispiel: Team

Projekt

Datei 1

Datei 2

Datei 3

Intern

Extern

Weiteres Beispiel

Annahme: 

Beispielseite ist bereits online.

 

Es gibt zwei Tasks:

Task 1: Bugfix für die Überschrift

Task 2: Erweitern der Beispielseite

 

Beides soll parallel entwickelt werden. Task 1 soll sofort live. Task 2 nach einer Abnahme eines Meilensteins, eventuell kommen noch mehr Tasks dazu die dann zusammen live gestellt werden sollen.

Beispielszenario

Title Text

Begriffsklärungen

Repository

Ein Repository ist ein Archiv für ein Projekt und beinhaltet alle Änderungen und Versionen der Dateien.

Branch

Ein Branch beschreibt zusammenhängende 

Änderungen in einem Projekt. Es gibt mindestens einen Branch und es kann beliebig viele Branches in einem Projekt geben.

Commit

Ein Commit ist ein einzelner Änderungseintrag in einem Branch. Es beschreibt mindestens eine Änderung an einer Datei und enthält eine Beschreibung der Änderung.

Begriffsklärungen

Clone

Clone beschreibt den Download eines gesamten Repositorys 

Push

Ein Push schiebt lokale Änderungen in einem Branch in ein Ziel-Repository.

Pull

Ein Pull lädt Änderungen eines Branches von einem Repository in das lokale Repository.

Fetch

Fetch holt Informationen zu Änderungen von einem Repository.

Checkout

Ein Checkout liest einen bestimmten Commit aus.

Repository

Zentral

  • Repository auf einem zentralen Server (Autorität)
  • Entwickler holen Änderungen von Server, bearbeiten lokal und legen Änderungen auf Server ab
  • Keine lokale Gesamtkopie, Verbindung zum Remote wird benötigt
  • Bsp: CVS, SVN

Verteilt

  • Mehrere Repositories
  • Entwickler haben komplett geclontes Repository lokal
  • zentrales Repository dennoch möglich (Autorität)
  • Commits können ohne Verbindung zum Haupt-Repo erledigt werden
  • Bsp: Git, Mercury, Bazaar

Vorteil DCVS

  • Schnelleres Arbeiten im Projekt da keine Verbindung zum Server benötigt (außer Push/Pull)
  • Änderungen können lokal bearbeitet und überarbeitet werden bevor es im Hauptrepo sichtbar ist 
  • Hauptrepository kann sauber gehalten werden (frei von Entwicklerbranches, nur relevante Branches werden veröffentlicht)

Nachteil DCVS

  • Große Projekte mit vielen Änderungen / Branches benötigen viel Platz
  • Clone kann u.U. lange dauern

Warum also Versionskontrolle?

  • Nachvollziehbares Archiv eines Projektes
  • Unterschiede zwischen Dateien erkennen
  • Komfortables Arbeiten im Team
  • Einheitliche Workflows
  • Qualitätssicherung 
  • uvm..

Git

Ein System

sie zu versionieren,

sie ewig zu committen und in die Repositories zu pushen

Git: DVCS Modell

Git: Änderungen

CVS/SVN:

Speichern Deltas (diffs) zu einer Basis-Version einer Datei

Git: Speichert Snapshots des Projektes

Git: Änderungen

Workflow: 

  1. Datei ändern
  2. Zum Index hinzufügen (stagen)
  3. Commiten

Git: Lifecycle von Dateien

Git: Branches

Git: Merge

Merge

Ein Merge beschreibt das Zusammenführen von Änderungen aus zwei unterschiedlichen Branches.

Fast-Forward Merge

Git: Merge

Merge-Commit

Ein Merge-Commit entsteht, wenn Änderungen in einem Branch vorhanden sind, die nicht über einen Fast-Forward gemergt werden.

Ein Merge-Commit hat deshalb mehr als einen Vorgänger.

Git: Rebase

Rebase

Ein Rebase wendet die Commits eines Branches auf den Basis-Branch an. Dadurch entstehen neue Commits und eine saubere, lineare Commit-History.

Git:

Git-Flow

Getting Started with Git

Tools: Smartgit

Tools: Tower

Online-Repositorys

Github.com

  • Kostenfreie öffentliche Repositories
  • Riesiges öffentliches Projekt-Archiv
  • Issue-Tracking, Collaboritive-Features...
  • viele Integrationen, Web-Hooks...

Bitbucket.com

  • Kostenfreie öffentliche Repositories
  • Kostenfreie private Repositories (max 5 Nutzer pro Repo)
  • Issue-Tracking, Collaboritive-Features...
  • viele Integrationen, Web-Hooks...

Gitlab.com

  • "Github" zum selber Hosten
  • viele Integrationen, Web-Hooks...

Erste Schritte

  • Leeres Repository anlegen
  • Datei(-en) hinzufügen
  • Stagen
  • Committen

Demo-Time!