Como o rsync resolve conflitos?

13

E se os compartilhamentos da máquina A e da máquina B tiverem um diretório previamente sincronizado via rsync , e A mudar um arquivo e B mudar o mesmo arquivo, e você rsync de A para B?

Talvez seja algo como um conflito de mesclagem em git ?

O conflito pode ser facilmente resolvido?

    
por lindhe 03.05.2015 / 00:40

1 resposta

24

O Rsync não tenta resolver conflitos. Este não é o seu trabalho. O Rsync nem sequer tem uma maneira de detectar que ambos os lados modificaram o arquivo, porque ele não possui informações sobre qualquer ancestral comum.

Com as opções padrão, o arquivo de origem é copiado incondicionalmente para o destino, sobrescrevendo o arquivo de destino. Com a opção -u , o arquivo de origem é copiado apenas se o arquivo de destino estiver ausente ou for mais antigo que o arquivo de origem. Com a opção --ignore-existing , o arquivo de origem é copiado apenas se o arquivo de destino não existir.

Se você quiser detectar conflitos, precisará de uma ferramenta que esteja ciente de quando os arquivos foram sincronizados pela última vez, para que ela possa distinguir {destination = old version, source = nova versão} de {destination = new version 1, source = nova versão 2}. Use Unison , que faz exatamente isso. Unison é um sincronizador bidirecional: copia o arquivo que foi modificado desde a última sincronização para o lado onde o arquivo não foi modificado. Se nenhum lado foi modificado, ou se ambos os lados foram modificados de forma idêntica, ele não faz nada. Se ambos os lados tiverem sido modificados de diferentes maneiras, isso indica a você e permite que você escolha pular, copiar em uma direção ou copiar na outra direção.

Se você quiser resolução automática de conflitos, isto é, fusões automáticas (sempre que possível - sempre há casos em que uma mesclagem manual é necessária), use um sistema de controle de revisão como o git.

    
por 03.05.2015 / 00:53