Jak rsync rozwiązuje konflikty?


14

Co jeśli udziały komputera A i komputera B mają wcześniej zsynchronizowany katalog rsync, a A zmienia plik, a B zmienia ten sam plik, a ty rsyncz A na B?

Czy może jest to coś w rodzaju konfliktu scalania git?

Czy konflikt można łatwo rozwiązać?

Odpowiedzi:


25

Rsync nie próbuje rozwiązać konfliktów. To nie jest jego praca. Rsync nie ma nawet sposobu na wykrycie, że obie strony zmodyfikowały plik, ponieważ nie ma informacji o żadnym wspólnym przodku.

Przy domyślnych opcjach plik źródłowy jest bezwarunkowo kopiowany do miejsca docelowego, zastępując plik docelowy. Dzięki tej opcji -uplik źródłowy jest kopiowany tylko wtedy, gdy brakuje pliku docelowego lub jest on starszy niż plik źródłowy. Dzięki tej opcji --ignore-existingplik źródłowy jest kopiowany tylko wtedy, gdy plik docelowy nie istnieje.

Jeśli chcesz wykryć konflikty, potrzebujesz narzędzia, które ma świadomość, kiedy pliki były ostatnio synchronizowane, aby mógł odróżnić {miejsce docelowe = stara wersja, źródło = nowa wersja} od {miejsce docelowe = nowa wersja 1, źródło = nowa wersja 2 }. Użyj Unison , który właśnie to robi. Unison to dwukierunkowy synchronizator: kopiuje plik, który został zmodyfikowany od ostatniej synchronizacji, na stronę, na której plik nie został zmodyfikowany. Jeśli żadna ze stron nie została zmodyfikowana lub obie strony zostały zmodyfikowane identycznie, nic nie robi. Jeśli obie strony zostały zmodyfikowane na różne sposoby, informuje o tym i pozwala ci pominąć, skopiować w jednym kierunku lub skopiować w drugim kierunku.

Jeśli chcesz automatycznego rozwiązywania konfliktów, tj. Automatycznego łączenia (jeśli to możliwe - zawsze są przypadki, w których konieczne jest ręczne scalenie), użyj systemu kontroli wersji, takiego jak git.

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.