Arbeiten mit Dateien

Trapezkünstler mit Netz

Wir alle versionieren

Ausgestorbene Alternative: Versionierende Dateisysteme

Dennis Richie und Ken Thompson an einer PDP-11 (Anfang der 1970er) einer der letzten VAX-Rechner (1992)

Das versionierende Dateisystem Files-11 (alias ODS) stand ab den späten 1960er Jahren auf DEC-Minicomputern der PDP-Baureihe (links) mit dem Betriebssystem RSX-11 und ab 1977 auf der VAX (rechts) mit VAX/VMS, später OpenVMS zur Verfügung.

Was bietet Versionierungssoftware?

Versionierungssoftware der ersten Generation

Hauptmerkmal: lokal

Einschränkungen

  • nur einzelne Dateien
  • nur Textdateien, keine binären Dateien
  • Sperren (locking) statt automatischer Konfliktauflösung (merging)

Versionierungssoftware der zweiten Generation

Hauptmerkmal: internetfähig und zentral (client-server)

Versionierungssoftware der dritten Generation

Hauptmerkmal: dezentral/verteilt (peer to peer)

Merkmale:

Zeitstrahl: Versionierungssoftware

VCS-Zeitstrahl

Popularität

Popularität 2.0

GitHub: Projekt-Hosting mit Social Web

GitHub-Wachstum

Git ready!

Arbeiten mit Git

Ein Projekt mit Git versionieren:

  • Projekte werden in Verzeichnissen verwaltet
  • git init legt ein Repository im aktuellen Verzeichnis an
    ~$ mkdir projekt
    ~$ cd projekt/
    ~/projekt$ git init
    Initialized empty Git repository in .git/
    ~/projekt$ ls -a
    .  ..  .git
  • git status: zeigt den aktuellen Zustand des Repositorys an
     ~/projekt$ git status
     # On branch master
    nothing to commit (working directory clean)

Arbeiten mit Git

Dateien versionieren

Git erkennt zwar standardmäßig alle Dateien im Projektverzeichnis, versioniert diese aber nicht automatisch

~/projekt$ touch datei.txt
~/projekt$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#        datei.txt
nothing added to commit but untracked files present (use "git add" to track)

Arbeiten mit Git

git add

Mit git add kann man Git anweisen, Dateien zu "tracken", d.h. auf Änderungen hin zu überwachen

~/projekt$ git add datei.txt
~/projekt$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# new file:   datei.txt
#

Arbeiten mit Git

git commit

  • Nach git add ist die Datei noch nicht im eigentlichen Repository, sondern in einem Zwischenbereich (Staging area).
  • Erst mit git commit wird sie endgültig gesichert:
    ~/projekt$ git commit
  • Es öffnet sich ein Texteditor mit der Aufforderung eine Commit-Message einzugeben. Alternativ kann man diese auch direkt mit angeben:
    ~/projekt$ git commit -m "Added file datei.txt"

Die drei Git-Arbeitsbereiche

Arbeitsverzeichnis

Enthält aktuelle Version des Projekts

Staging area

Zwischenbereich zwischen Arbeitsverzeichnis und Repository; enthält Änderungen für den nächsten Commit

Git-Repository

Datenbank, welche die Versionshistorie (Commits) enthält (.git-Verzeichnis)

Entsprechende Arbeitsschritte:

  1. git add <datei>: Überführt Änderungen vom Arbeitsverzeichnis in die Staging area
  2. git commit: Übernimmt alle Änderungen aus der Staging area ins Repository

Wozu die Staging area?

Versionshistorie anzeigen

git log
commit 70164885d0ef60ed5201ca6881613d0cc706e4fc
Author: Max Mustermann <Max.Mustermann@uni-bielefeld.de>
Date:   Wed May 2 15:50:53 2012 +0200

    Changed page title

commit 23216a54cf49ef7f47cbeff8ad645545f2abc377
Author: Max Mustermann <Max.Mustermann@uni-bielefeld.de>
Date:   Wed May 2 15:48:46 2012 +0200

    Added another bullet point

Branches

Branches

Merging

Merge-Konflikte

Remote Repositories

Remote Repositories II

Clone

Push, Fetch und Pull

Nur am Rande …

GitHub

Zusammenfassung

Literaturtipps

Bücher:

Lösungen für Einzelprobleme

Vielen Dank!

Octocat
Bildquelle

Über diese Präsentation