Rsync não tenta resolver conflitos. Este não é o seu trabalho. O Rsync nem sequer tem como detectar que os dois lados modificaram o arquivo, porque não possui informações sobre nenhum ancestral comum.
Com as opções padrão, o arquivo de origem é copiado incondicionalmente para o destino, substituindo o arquivo de destino. Com a opção -u
, o arquivo de origem é copiado apenas se o arquivo de destino estiver ausente ou 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ê deseja detectar conflitos, precisa de uma ferramenta que esteja ciente de quando os arquivos foram sincronizados pela última vez, para poder distinguir {destination = versão antiga, origem = nova versão} de {destination = nova versão 1, source = nova versão 2 } Use o Unison , que faz exatamente isso. O Unison é um sincronizador bidirecional: copia o arquivo que foi modificado desde a última sincronização para o lado em que o arquivo não foi modificado. Se nenhum dos lados foi modificado ou se ambos foram modificados de forma idêntica, não faz nada. Se os dois lados foram modificados de maneiras diferentes, ele informa e permite que você pule, copie em uma direção ou copie na outra direção.
Se você deseja resolução automática de conflitos, ou seja, mesclagens 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.
Gilles 'SO- parar de ser mau'
fonte