Rechner synchronisieren und Dateien teilen mit git-annex

Die Git-Erweiterung git-annex des Debian-Entwicklers Joey Hess ermöglicht die gezielte Synchronisation von Rechnern und Speichermedien sowie das Teilen von Dateien. Es macht zentrale Dienste wie Dropbox überflüssig und schützt damit die Privatsphäre.

Eine gute und ein schlechte Nachricht vorweg. Zunächst die schlechte: git-annex ist ein Lösungsansatz für teilweise sehr komplexe Probleme, sodass eine gewisse Einarbeitungszeit notwendig ist, um die Konzepte, die dem Programm zugrunde liegen zu verstehen. Die gute Nachricht: Es gibt einen Assistenten mit Web-Interface, der die Nutzung stark vereinfacht.

Was ist git-annex

git-annex ist eine Erweiterung des Versionierungssystems Git. Git ist wie die meisten Versionierungssysteme optimiert für die Verwaltung von Textdateien. Große binäre Dateien wie Bilder, Videos oder Musikdateien überfordern Versionierungsprogramme. Oftmals macht es auch gar keinen Sinn binäre Daten zu versionieren. Versionskontrollsysteme speichern alle Versionen einer Datei in einem Archiv. Bei Textdateien werden lediglich die Veränderungen von Version zu Version gespeichert. Bei binären Daten legen die meisten Versionskontrollsysteme jedoch eine vollständige Kopie einer leicht veränderten Datei an, sodass die Archive schnell übermäßig groß werden. Mit git-annex werden nur die Metadaten einer Datei in der Versionskontrolle gespeichert und die Datei selbst als Anhang (engl. annex) in einem gesonderten Ordner. Diese Methode, große Dateien als Anhang zu verwalten, und die Macht von Git eröffnen eine ganze Reihe toller Anwendungsmöglichkeiten.

Dateien auf USB-Platten auslagern

Jeder, der mit vielen Mediendateien hantiert, kennt das Problem. Irgendwann ist die Festplatte des Rechners voll und man muss Bilder, Videos und Musikdateien auf einer USB-Festplatte auslagern. Viele warten mit dem Auslagern jedoch nicht bis die Festplatte voll ist. Sie speichern lieber gleich alle Dateien auch auf einem oder auf mehreren USB-Medien, damit sie ein Backup zur Verfügung haben.

Mit git-annex kann man seine Mediendateien auf mehrere USB-Medien auslagern und gleichzeitig unter einem Verzeichnisbaum verwalten. Letzteres bedeutet, dass es so aussieht, als befänden sich alle Dateien auf dem Rechner selbst, während sich die Daten in Wirklichkeit auf den USB-Medien befinden. Git-annex weiß stets, auf welchem USB-Medium sich die Daten befinden, sodass man sie bei Bedarf von den USB-Medien auf den lokalen Rechner kopieren kann.

Man erkennt Dateien, deren Inhalt sich nicht auf dem lokalen Rechner befinden, daran, dass sie im Dateimanager als defekter Link angezeigt werden. Mit einem git-annex Befehl kann man den Inhalt der Datei vom dem USB-Medium herunterladen, sodass die komplette Datei lokal verfügbar wird.

Über einen weiteren Mechanismus lassen sich Daten auch sehr einfach archivieren.

Der Anwendungsfall ist übrigens nicht auf USB-Medien beschränkt. Es ist letztlich völlig egal, wo sich die Repositories befinden. Jedes Repository zeigt den vollständigen Verzeichnisbaum an und weiß, wo sich die Daten zu den angezeigten Links befinden. Und damit wären wir beim nächsten Anwendungsfall.

Desktop und Notebook synchronisieren

Es ist mittlerweile eher die Regel als die Ausnahme, dass man mit verschiedenen Endgeräten arbeitet. Desktop und Notebook stehen hier stellvertretendfür mehrere Rechner oder Endgeräte, deren Daten synchronisiert werden sollen. Mit git-annex lässt sich eine komplette Verzeichnisstruktur zwischen verschiedenen Rechnern synchronisieren. Genügend Speicherplatz vorausgesetzt, stehen dann auf allen synchronisierten Endgeräten die gleichen Daten zur Verfügung. Wie oben beschrieben können Daten aber auch ausgelagert und nur bei Bedarf auf den lokalen Rechner kopiert werden. Voraussetzung ist natürlich, dass die Rechner miteinander verbunden werden können. Im eigenen Netz ist das einfach. Über ssh kann man auch Rechner in verschiedenen Netzen synchronisieren.

Intelligentes Filesharing mit git-annex

Mit git-annex kann man Repositores über Jabber/XMPP mit anderen Personen teilen. Über XMPP läuft dabei der Austausch der Metadaten sowie die Commit-Informationen. Nachdem ein Verzeichnis über Jabber geteilt wurde, erscheinen beim Partner alle Dateien zunächst als zerbrochener Link, da die eigentlichen Daten über einen zentralen Server oder die Cloud miteinander geteilt werden. Git-annex bietet hier zahlreiche Möglichkeiten an. Die Repositories können auch verschlüsselt werden.

Nachbemerkung

Ich bin hier bewusst nur auf einige Anwendungsmöglichkeiten eingegangen und habe darauf verzichtet, eine Anleitung zu schreiben. Auf git-annex.branchable.com findet man eine Kurzanleitung und Anleitungsvideos. Wer git-annex ausprobieren möchte, sollte das Programm entweder über Kommandozeile steuern oder über das Webinterface. Das Webinterface basiert auf git annex assistent, dem Assistenten, der bereits zahlreiche Einstellungen automatisch vornimmt. Es kann verwirrend sein, wenn man ein Repository mit dem Assistenten angelegt hat und dann der Anleitung für die Kommandozeile folgt.

Update: Deinstalliert wegen dauernder Programmabstürze

Leider kann ich die Software nun doch nicht im Detail ausprobieren, weil der gsha256sum-Prozess von git-annex auf meinem MacBook dauernd abstürzt und die Crash-Logs vollgemüllt werden. Deshalb habe ich git-annex auf dem Mac erst einmal wieder deinstalliert. Es soll angeblich einen Fix geben, aber der ist noch nicht bis zu mir durchgedrungen.

Update 2: Ori, a Secure Distributed File System

Gerade stolpere ich über einen ähnlichen Ansatz, Dateien auf mehreren Geräten und zwischen verschiedenen Benutzern zu teilen: Ori.

Die Entwickler, die Stanford Secure Computer Systems Group schreiben dazu

»Ori is a distributed file system built for offline operation and empowers the user with control over synchronization operations and conflict resolution. We provide history through light weight snapshots and allow users to verify the history has not been tampered with. Through the use of replication instances can be resilient and recover damaged data from other nodes.«

Selbst ausprobiert habe ich Ori noch nicht.

Update 3:  Mac OS X Probleme gefixt

Joey Hess hat die Ursache für die Abstürze unter Mavericks auf meinem Rechner gefunden. Es lag an Optimisierungen, die meine CPU nicht vertrug. Nachdem das Programm mit einer anderen Konfiguration kompiliert wurde, taucht das Problem nicht mehr auf.

Leider habe ich immer noch ein Problem mit einem Repository, das auch viele kleine Dateien enthält, und damit nicht ganz dem Use-Case von git-annex entspricht. Aber so ist das Leben. In meinem Dokumenten-Ordner sind neben normal großen OpenDocument- und PDF-Dateien auch einige Ordner mit vielen kleinen Textdateien. Hier scheitert die Synchronisierung zwischen Desktop und Notebook. Wie dumm, dass dieser Ordner mir besonders wichtig ist.