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)

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.