Как rsync разрешает конфликты?


14

Что если rsyncобщий доступ к машине A и машине B имеет каталог, который ранее был синхронизирован через , и A изменяет файл, а B изменяет тот же файл, и вы переходите rsyncс A на B?

Может быть, это что-то вроде конфликта слияния git?

Может ли конфликт быть легко разрешен?

Ответы:


25

Rsync не пытается разрешать конфликты. Это не его работа. Rsync даже не может обнаружить, что обе стороны изменили файл, потому что у него нет информации о каком-либо общем предке.

При использовании параметров по умолчанию исходный файл безоговорочно копируется в место назначения, перезаписывая файл назначения. С помощью этой опции -uисходный файл копируется, только если конечный файл отсутствует или старше исходного файла. С помощью этой опции --ignore-existingисходный файл копируется, только если целевой файл не существует.

Если вы хотите обнаруживать конфликты, вам нужен инструмент, который знает, когда файлы были в последний раз синхронизированы, чтобы он мог отличить {назначение = старая версия, источник = новая версия} от {назначение = новая версия 1, источник = новая версия 2 }. Используйте Unison , который делает именно это. Unison - это двунаправленный синхронизатор: он копирует файл, который был изменен с момента последней синхронизации, в ту сторону, где файл не был изменен. Если ни одна из сторон не была изменена, или если обе стороны были изменены одинаково, это ничего не делает. Если обе стороны были изменены по-разному, это говорит вам и позволяет выбрать пропустить, копировать в одном направлении или копировать в другом направлении.

Если вам нужно автоматическое разрешение конфликтов, то есть автоматическое слияние (когда это возможно - всегда есть случаи, когда необходимо ручное слияние), используйте систему контроля версий, такую ​​как git.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.