Wie löst rsync Konflikte?

14

Was passiert, wenn die Freigaben von Maschine A und Maschine B ein Verzeichnis haben, das zuvor über synchronisiert wurde rsync, und A eine Datei ändert und B dieselbe Datei ändert und Sie rsyncvon A nach B wechseln ?

Ist es vielleicht so etwas wie ein Zusammenführungskonflikt git?

Kann der Konflikt leicht gelöst werden?

Lindhe
quelle

Antworten:

25

Rsync versucht nicht, Konflikte zu lösen. Das ist nicht seine Aufgabe. Rsync kann nicht einmal erkennen, dass beide Seiten die Datei geändert haben, da es keine Informationen zu gemeinsamen Vorfahren gibt.

Mit den Standardoptionen wird die Quelldatei bedingungslos in das Ziel kopiert und die Zieldatei überschrieben. Mit dieser Option -uwird die Quelldatei nur kopiert, wenn die Zieldatei fehlt oder älter als die Quelldatei ist. Mit der Option --ignore-existingwird die Quelldatei nur kopiert, wenn die Zieldatei nicht existiert.

Wenn Sie Konflikte erkennen möchten, benötigen Sie ein Tool, das weiß, wann die Dateien zuletzt synchronisiert wurden, damit {Ziel = alte Version, Quelle = neue Version} von {Ziel = neue Version 1, Quelle = neue Version 2 unterschieden werden kann }. Verwenden Sie Unison , das genau das tut. Unison ist ein bidirektionaler Synchronisierer: Er kopiert die Datei, die seit der letzten Synchronisierung geändert wurde, auf die Seite, an der die Datei nicht geändert wurde. Wenn keine Seite geändert wurde oder wenn beide Seiten identisch geändert wurden, hat dies keine Auswirkungen. Wenn beide Seiten auf unterschiedliche Weise geändert wurden, werden Sie darüber informiert und können auswählen, ob Sie in eine Richtung oder in die andere Richtung überspringen, kopieren möchten.

Wenn Sie eine automatische Konfliktlösung wünschen, dh automatische Zusammenführungen (wenn möglich - es gibt immer Fälle, in denen eine manuelle Zusammenführung erforderlich ist), verwenden Sie ein Revisionskontrollsystem wie git.

Gilles 'SO - hör auf böse zu sein'
quelle