In che modo rsync risolve i conflitti?


14

Cosa succede se le condivisioni della macchina A e della macchina B hanno una directory precedentemente sincronizzata tramite rsync, e A cambia un file e B cambia lo stesso file e tu rsyncda A a B?

È forse qualcosa come un conflitto di unione in git?

Il conflitto può essere facilmente risolto?

Risposte:


25

Rsync non cerca di risolvere i conflitti. Questo non è il suo lavoro. Rsync non ha nemmeno un modo per rilevare che entrambe le parti hanno modificato il file, perché non ha informazioni su alcun antenato comune.

Con le opzioni predefinite, il file di origine viene copiato incondizionatamente nella destinazione, sovrascrivendo il file di destinazione. Con l'opzione -u, il file di origine viene copiato solo se il file di destinazione è mancante o precedente al file di origine. Con l'opzione --ignore-existing, il file di origine viene copiato solo se il file di destinazione non esiste.

Se si desidera rilevare conflitti, è necessario uno strumento a conoscenza dell'ultima sincronizzazione dei file, in modo che sia in grado di distinguere {destinazione = vecchia versione, fonte = nuova versione} da {destinazione = nuova versione 1, fonte = nuova versione 2 }. Usa Unison , che fa esattamente questo. Unison è un sincronizzatore bidirezionale: copia il file che è stato modificato dall'ultima sincronizzazione sul lato in cui il file non è stato modificato. Se nessuna delle parti è stata modificata, o se entrambe le parti sono state modificate in modo identico, non fa nulla. Se entrambi i lati sono stati modificati in modi diversi, ti dice e ti consente di scegliere di saltare, copiare in una direzione o copiare nell'altra direzione.

Se si desidera la risoluzione automatica dei conflitti, ovvero fusioni automatiche (quando possibile - ci sono sempre casi in cui è necessaria un'unione manuale), utilizzare un sistema di controllo di revisione come git.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.