Ich verwende Unison, um einige Dateien zwischen meinem Heimcomputer und meinem Arbeitscomputer zu synchronisieren. Da die beiden Computer jedoch keine direkte Verbindung über SSH herstellen können, synchronisiere ich über einen USB-Stick (mit ext4 formatiert, um die Berechtigungen beizubehalten).
Mein Problem besteht darin, dass Unison die Konfiguration des Synchronisierungsprofils lokal (im .unison-Verzeichnis) statt im Ordner selbst speichert. Das bedeutet, dass einige Informationen, wie ignorierte Dateien, in den beiden Profilen, die ich behalte, dupliziert werden müssen.
Gibt es eine Möglichkeit, das Synchronisierungsprofil zwischen den beiden Computern automatisch synchron zu halten?
Antwort1
Ich behalte das Profil im Verzeichnis, das synchronisiert werden soll. Darin ~/.unison
setze ich einen symbolischen Link zum echten Profil. Das hat bei mir gut funktioniert. Außerdem kann ich damit schnell einen neuen Rechner „booten“: einfach das Profil vom USB-Laufwerk auf einen neuen Computer kopieren und neu starten.
Es gibt einen Haken. Wenn Sie einignorierenZeile zum Profil (auf einem Computer), die mit einer Datei übereinstimmt, die zufällig bereits auf dem USB-Laufwerk vorhanden ist, wird diese Datei bei der nächsten Unison-Synchronisierung vom USB-Laufwerk auf den anderen Computer übertragen, trotz derignorierenZeile. Der Grund dafür ist, dass das Profil zwar übertragen werden soll, aber erst (auf dem anderen Computer) wirksam wird, wenn dienächsteSynchronisierung. Ansonsten sind mir bisher keine Probleme aufgefallen.
Antwort2
Die Alternative, für die ich mich entschieden habe, ist eine zweistufige Synchronisierung. Ich habe ein Unison-Profil zum Synchronisieren meiner Unison-Profile.
#.unison/sneakernet-init.prof
label = Unison profiles
root = /home/hugo/.unison
root = /media/hugo/MYDRIVE/Sync/Unison
path = sneakernet-common # ignore rules, diff command, etc
path = sneakernet-dotfiles.prf # profile for my dotfiles
path = sneakernet-hugobox.prf # profile for my other stuff
Dann verwende ich ein Skript, um es mit jedem Profil einzeln auszuführen.
#syncronize-things.sh
unison-gtk sneakernet-init
unison-gtk sneakernet-dotfiles
unison-gtk sneakernet-hugobox
sync # Flush file system caches
Diese Lösung ist etwas umständlich, da ich Unison dreimal statt einmal ausführen muss, aber sie hat den Vorteil, dass keines der Unison-Profile für die Synchronisierung selbst verantwortlich ist (was zu dem seltsamen Verhalten führt, dass Sie Unison möglicherweise zweimal mit demselben Profil ausführen müssen, damit alles funktioniert).