Automatyczne rozwiązywanie konfliktów zgodnie

2

Wcześniej skonfigurować niestandardowe zautomatyzowaną synchronizację między 2 foldery (w OSX) z chórem z następującą linię:

unison folder1 folder2 -batch -debug update+

Które działało dobrze, dopóki nie spotkałem:

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

Chciałbym, aby polecenie automatycznie synchronizowało najnowszą wersję. Patrząc w opcje:

$ 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

.. co sugeruje, że jedynym sposobem na rozwiązanie tego problemu jest -prefer, ale być może czegoś mi brakuje. Czy można określić wersję według znacznika czasu?


EDYCJA: Wszystkie odpowiednie bity raportu synchronizacji:

[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)
geotheory
źródło
1
Mogę zrozumieć, dlaczego znaczniki czasowe nie są oferowane do rozwiązywania konfliktów: jeśli trywialna zmiana w jednym systemie jest po znaczącej zmiany na drugą, byś nie chcesz zachować nowszą wersję.
AFH
Uczciwy punkt. Ale można by pomyśleć, że może istnieć jakiś sposób dostrzegania istotnych zmian, takich jak np. Zmiana liczby wierszy w pliku.
geotheory
Tyle że pliki tekstowe są obecnie w mniejszości, z przewagą plików multimedialnych i biurowych, a prawie wszystkie są binarne. W każdym razie znacząca edycja tekstu może nie zmienić liczby wierszy w pliku, stąd użycie „podsumowań treści” (prawdopodobnie pochodzących z CRC32), gdzie najmniejsza zmiana w pliku źródłowym spowoduje całkowicie niepowiązane podsumowanie. Bez zachowania trzeciej kopii katalogów po synchronizacji niemożliwe jest ustalenie, które zmiany były niewielkie po zaktualizowaniu obu plików.
AFH
Drat i fiddlesticks
geotheory

Odpowiedzi:

2

Zrezygnowałem ze znacznika czasu i zdecydowałem się na priorytetowe traktowanie jednej wersji poprzez dodanie argumentu

-prefer /path/to/folder1

który rozwiązuje konflikty.

geotheory
źródło