Câu trả lời:
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.