git poor man’s time machine

Arch
git
Autor:in

produnis

Veröffentlichungsdatum

9. Februar 2017

Eine etwas exotischere Verwendungsweise von git ist die einer Time Machine. Das Prinzip einer Time Machine ist, dass für einen Ordner, zB dem eigenen Dokumentenordner, regelmäßige Schnappschüsse erstellt werden. Das Feature ist dann, dass man “durch die Zeit” blättern kann, um alte Versionen oder gelöschte Dateien zu finden. Mit git kann man sich soetwas recht einfach erstellen:

Im Terminal wechselt man in das gewünschte Verzeichnis:

 cd /Pfad/zum/Verzeichnis

Dort erstellt man ein git-Repository:

git init

Und fügt alle Dateien dem Repository hinzu:

    git add *
    git commit -m "initial commit"

Jetzt benötigen wir ein Script, welches per Cronjob in den Intervallen ausgeführt wird, die wir gerne für unsere Time Machine Snapshots hätten. Mögliche Cronjobs wären zB.

    crontab -e
    @hourly /pfad/zu/script.sh
    @daily /pfad/zu/script.sh

Die Datei script.sh müssen wir erstellen und ausführbar machen, und ihr folgenden Inhalt geben:

    #!/bin/bash
    DATE=`date +"%Y-%m-%d_%H-%M-%S"`
    cd /path/to/your/folder       # Change to your settings
    git checkout -b $DATE
    git checkout $DATE
    git add *
    git commit -m "snapshot of $DATE"
    git checkout master
    git rebase $DATE

Das Script erstellt einen neuen Branch DATE und führt einen commit auf alle Änderungen im Verzeichnis durch. Anschließend wird ein rebase des commit auf den Branch “master” ausgeführt. Die Änderungen liegen also im Branch DATE als auch im Branch master.

Der Branch DATE wird nicht gelöscht. Er ist der Landepunkt für unsere Zeitmaschine.

Um nun durch die Zeit zu reisen wechselt man im Terminal in das Verzeichnis und gibt ein:

    git checkout DATE

wobei DATE ein Zeitstempel ist. Welche Zeitstempel verfügbar sind zeigt der Befehl

    git branch

Der Befehl versetzt euer Verzeichnis in den Zustand, in dem es sich zum Zeitpunkt DATE befunden hat.

Um wieder in die Gegenwart zu wechseln verwendet man den Befehl:

    git checkout master