Làm thế nào để rsync giải quyết xung đột?


14

Điều gì sẽ xảy ra nếu cổ phiếu của máy A và máy B có một thư mục được đồng bộ hóa trước đó rsyncvà A thay đổi một tệp và B thay đổi cùng một tệp và bạn rsynctừ A đến B?

Có lẽ bất cứ điều gì giống như một cuộc xung đột hợp nhất trong git?

Xung đột có thể được giải quyết dễ dàng?

Câu trả lời:


25

Rsync không cố gắng giải quyết xung đột. Đây không phải là công việc của nó. Rsync thậm chí không có cách nào để phát hiện ra rằng cả hai bên đã sửa đổi tệp, bởi vì nó không có thông tin về bất kỳ tổ tiên chung nào.

Với các tùy chọn mặc định, tệp nguồn được sao chép vô điều kiện vào đích, ghi đè lên tệp đích. Với tùy chọn -u, tệp nguồn chỉ được sao chép nếu tệp đích bị thiếu hoặc cũ hơn tệp nguồn. Với tùy chọn --ignore-existing, tệp nguồn chỉ được sao chép nếu tệp đích không tồn tại.

Nếu bạn muốn phát hiện xung đột, bạn cần một công cụ nhận biết khi nào các tệp được đồng bộ hóa lần cuối, để nó có thể phân biệt {Destination = phiên bản cũ, source = phiên bản mới} với {Destination = phiên bản mới 1, source = phiên bản mới 2 }. Sử dụng Unison , chính xác là làm điều đó. Unison là một trình đồng bộ hóa hai chiều: nó sao chép tệp đã được sửa đổi kể từ lần đồng bộ hóa cuối cùng sang phía nơi tệp chưa được sửa đổi. Nếu không có bên nào được sửa đổi, hoặc nếu cả hai bên đã được sửa đổi giống hệt nhau, thì không có gì. Nếu cả hai mặt đã được sửa đổi theo những cách khác nhau, nó sẽ cho bạn biết và cho phép bạn chọn bỏ qua, sao chép theo một hướng hoặc sao chép theo hướng khác.

Nếu bạn muốn giải quyết xung đột tự động, tức là hợp nhất tự động (khi có thể - luôn có trường hợp cần hợp nhất thủ công), hãy sử dụng hệ thống kiểm soát sửa đổi, chẳng hạn như git.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.