Konflikt mit unisono automatisch auflösen

2273
geotheory

Ich habe eine benutzerdefinierte automatisierte Synchronisierung zwischen zwei Ordnern (in OSX) mit Unison mit der folgenden Zeile eingerichtet:

unison folder1 folder2 -batch -debug update+ 

Was funktionierte gut, bis ich traf:

Synchronization complete at 12:01:44 (0 item transferred, 1 skipped, 0 failed) skipped: example.txt (contents changed on both sides) 

Ich möchte, dass der Befehl die neueste Version automatisch synchronisiert. Suchen Sie in den Optionen:

$ unison -help | grep conflict -auto automatically accept default (nonconflicting) actions -copyonconflict keep copies of conflicting files -prefer xxx choose this replica's version for conflicting changes 

.. was den einzigen Weg zur Lösung vorschlägt, ist mit -prefer, aber mir fehlt vielleicht etwas. Kann man die Version per Zeitstempel angeben?


BEARBEITEN: Alle relevanten Bits des Synchronisierungsberichts:

[update+] Unchanged file [update+] buildUpdateChildren(handleChild): example.txt [update] buildUpdateRec: /path/to/folder1/example.txt [update] checkContentsChange: archStamp is inode (3373366) / info.inode (3373748) / times: 1433242394.000000 = 1433242527.000000... false / lengths: 110602 - 110611 [update+] Double-check possibly updated file [update] archive digest = (29c46acff8e661513ec7487bc0069c2b,) current digest = (cdc82c2519076f9e52486b1c881e179d,)  [update+] Unchanged file [update+] buildUpdateChildren(handleChild): example.txt [update] buildUpdateRec: /path/to/folder2/example.txt [update] checkContentsChange: archStamp is inode (3373726) / info.inode (3373746) / times: 1433242452.000000 = 1433242515.000000... false / lengths: 110602 - 109400 [update+] Double-check possibly updated file [update] archive digest = (29c46acff8e661513ec7487bc0069c2b,) current digest = (e12ef45f692808d50989ca4b08d8c27f,)  changed <-?-> changed example.txt  Synchronization complete at 12:23:37 (0 item transferred, 1 skipped, 0 failed) skipped: example.txt (contents changed on both sides) 
2
Ich kann verstehen, warum keine Zeitstempel zum Lösen von Konflikten angeboten werden: Wenn eine triviale Änderung an einem System nach einer signifikanten Änderung am anderen System vorgenommen wird, möchten Sie die spätere Version nicht ** behalten. AFH vor 8 Jahren 1
Gutes Argument. Aber Sie denken vielleicht, dass es eine Möglichkeit gibt, wesentliche Änderungen zu erkennen, wie z. B. das Ändern der Zeilenanzahl in einer Datei. geotheory vor 8 Jahren 0
Nur dass Textdateien heutzutage in der Minderheit sind, wobei Medien- und Bürodateien dominieren und diese fast alle binär sind. In jedem Fall kann eine umfangreiche Textbearbeitung die Anzahl der Zeilen in einer Datei nicht ändern. Daher werden "content digests" (wahrscheinlich von CRC32 abgeleitet) verwendet, bei denen die geringste Änderung in der Quelldatei einen völlig unabhängigen Digest erzeugt. Wenn Sie nach der Synchronisierung keine dritte Kopie der Verzeichnisse aufbewahren, können Sie nicht feststellen, welche Änderungen geringfügig waren, nachdem beide Dateien aktualisiert wurden. AFH vor 8 Jahren 0
Drat und Fiddlesticks geotheory vor 8 Jahren 0

1 Antwort auf die Frage

2
geotheory

Ich habe den Zeitstempel aufgegeben und entschieden, eine Version durch Hinzufügen des Arguments zu priorisieren

-prefer /path/to/folder1 

das löst die Konflikte.