Як rsync вирішує конфлікти?


14

Що робити, якщо спільні машини A і B мають каталог, який раніше синхронізувався через rsync, і 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.