Linux Software zum Synchronisieren



  • Hoi! 😉

    Ich habe auf meinem Rechner eine Vielzahl an Daten, die auch auf dem Notebookund dem Netbook synchron haben wollen würde. Im Gegenzug möchte ich zuhause gleich weiterarbeiten können, wenn ich unterwegs auf dem Netbook etwas gearbeitet habe.

    Auf allen 3 Geräten läuft Linux und ich habe einen Rootserver, ebenfalls Linux.
    Was würdet ihr mir raten? rsync? Oder fällt euch eine schönere Lösung ein?

    Danke schon mal und Grüße,
    Flo



  • Wenn du ne GUI willst, dann könntest du Unison nehmen (kann zB rsync nutzen).



  • Ich rate hier von rsync ab und empfehle git.

    rsync ist für Datenübertragung in eine Richtung sinnvoll, aber wenn sich die Daten auf verschiedenen PCs ändern können, wird man damit früher oder später Daten verlieren, weil man die Daten in die falsche Richtung überträgt.



  • Christoph schrieb:

    Ich rate hier von rsync ab und empfehle git.

    rsync ist für Datenübertragung in eine Richtung sinnvoll, aber wenn sich die Daten auf verschiedenen PCs ändern können, wird man damit früher oder später Daten verlieren, weil man die Daten in die falsche Richtung überträgt.

    ++

    git ist echt ein unglaublich geniales Stück Software.



  • kann man bei git auch nur synchronisieren ohne versionskontrolle? d.h., ich will nur bei konflikten eingreifen muessen, der rest wird ueberschrieben.



  • mezzo mix schrieb:

    kann man bei git auch nur synchronisieren ohne versionskontrolle? d.h., ich will nur bei konflikten eingreifen muessen, der rest wird ueberschrieben.

    Im Prinzip ja, aber nicht automatisch. Du wirst ein oder zwei kleine Shell-Skripte brauchen und vielleicht einen Cronjob. git pull, was intern (falls notwendig) git merge aufruft, gibt am exit code an ob der merge geklappt hat oder nicht.

    Mit einer Zeile wie

    git add . && git commit -a -m autocommit
    

    kannst du alle Änderungen committen. Wenn dir die history und die Versionskontrolle egal sind, kannst du das vielleicht sogar in einem cron-job machen alle paar Minuten. git commit erstellt keinen commit, wenn es keine Änderungen gibt. Ich hab das bisher aber noch nie so gemacht, weil ich lieber eine etwas ordentlichere history habe.

    Danach kann man mit git push und git pull die commits hin und her schieben zwischen den verschiedenen PCs. Allerdings ist git push eigentlich nur bei bare repositories sinnvoll, also das, was wahrscheinlich auf deinem root-Server wäre.

    Für größere Dateien würde ich git aber nicht nehmen. Denn alles, was einmal im Repository war, bleibt für immer drin. Vielleicht wär dafür git annex geeignet, aber das habe ich noch nicht selber benutzt.



  • danke fuer die ausfuehrliche antwort!

    Christoph schrieb:

    Für größere Dateien würde ich git aber nicht nehmen. Denn alles, was einmal im Repository war, bleibt für immer drin. Vielleicht wär dafür git annex geeignet, aber das habe ich noch nicht selber benutzt.

    genau das ist mein problem. git-annex ist anscheinend auch nicht das richtige.

    von unison habe ich schon mal gehoert:

    Unlike simple mirroring or backup utilities, Unison can deal with updates to both replicas of a distributed directory structure. Updates that do not conflict are propagated automatically. Conflicting updates are detected and displayed.

    Unison is resilient to failure. It is careful to leave the replicas and its own private structures in a sensible state at all times, even in case of abnormal termination or communication failures.

    klingt nach dem was ich suche.



  • Da ich primär Uni-Zeugs und private Projekte damite synchen möchte ist Git perfekt.
    Danke für die Antworten!



  • Christoph schrieb:

    Ich rate hier von rsync ab und empfehle git.

    rsync ist für Datenübertragung in eine Richtung sinnvoll, aber wenn sich die Daten auf verschiedenen PCs ändern können, wird man damit früher oder später Daten verlieren, weil man die Daten in die falsche Richtung überträgt.

    Dagegen hilft etwas Selbstdisziplin!

    Ich habe in jedem meiner Ordner (ohne Unterordner) den ich mit rsync synce eine Changelog.txt Textdatei und wenn ich innerhalb dieses Ordners Änderungen vornehme, dann lege ich einen Eintrag in der Changelog.txt an.

    Damit weiß ich immer, welche der beiden rsync Kopien die aktuellere ist und falls beide so nen neuen Eintrag haben, dann weiß ich, daß hier ein Konflikt besteht der sowieso händisch gelöst werden muß und da ich in den Eintrag reinschreibe, was ich geändert habe, weiß ich auch wo ich suchen muß.

    Prinzipiell kann man das ganze mit einem Script noch etwas automatisieren.
    Z.B. könnte man die Changelog.txt mit Schlüsselwörtern ähnlich XML versehen, so daß man jeden Eintrag gut auslesen kann.
    Und automatisiert kann die Zeit eingetragen werden und den selbstgeschriebenen Beschreibungstext, der ist auch nicht anders als bei einem GIT Commit.

    Und mit rsync -n bzw. dry-run geht man sowieso auf Nummer sicher, ob man irgendwas überschreibt.

    Allem in allem spart man sich so aber einen Overhead und zuviel Platzverschwendung wie es bei GIT und entsprechenden BLOB Dateien üblich wäre.

    Versionskontrollsysteme sind IMO eigentlich überwiegend nur bei Textdateien (Quellcode gehört auch dazu) platzsparend.


Anmelden zum Antworten