Você tem duas hierarquias de arquivos misturadas: /var/chef
e /var/chef/chef
. Parece que você está editando um e depois lendo o outro.
scp -r [email protected]:/var/chef .
cria um diretório chef
dentro do diretório atual. Se você executou isso de /var/chef
.
Os comandos propostos são terríveis. Esqueça tudo o que você leu nesse tutorial.
scp -r
não preserva permissões ou tempos de arquivo. Use scp -rp
para preservá-los.
rsync -r
não preserva permissões ou tempos de arquivo. Esqueça que a opção -r
existe. Use rsync -a
, que preserva todos os metadados usuais. Sempre passe a opção -a
para o rsync, a menos que você tenha uma boa razão para não fazê-lo.
Quando você escreve rsync -a /path/to/source /path/to/destination
, isso cria um subdiretório chamado source
sob destination
. Se você quiser sincronizar /path/to/source
com /path/to/destination
, adicione uma% final/
ao final do destino: rsync -a /path/to/source /path/to/destination/
copies /path/to/source/somefile
to /path/to/destination/somefile
.
É muito importante preservar os tempos de modificação do arquivo. Dessa forma, você sabe quando um arquivo foi modificado pela última vez. Suas ferramentas também sabem quando um arquivo foi modificado. Em particular, sincronizar um diretório grande no qual a maioria dos arquivos não foi modificada é muito mais rápido se os tempos de arquivo forem confiáveis. O rsync pulará um arquivo rapidamente se o nome, tamanho e hora de modificação forem os mesmos em ambos os lados.
Você pode dizer ao rsync para transferir apenas arquivos mais recentes no lado da origem, adicionando a opção -u
( rsync -au SOURCE DESTINATION
). Isso limita os riscos se os arquivos também tiverem sido editados no lado do destino: você não apagará a versão mais nova que está no lado do destino com a cópia mais antiga no lado da origem. No entanto, você não pode detectar conflitos com segurança: se um arquivo tiver sido editado em ambos os lados, a versão que tiver a modificação mais recente vencerá.
O Rsync é uma ferramenta para sincronizar dados em uma direção. Não o use para sincronizar nas duas direções. Em vez disso, use Unison . O Unison mantém uma lista de versões de arquivos cada vez que você o executar e reclamará em alta voz se houver algum conflito (o mesmo arquivo editado independentemente em ambos os lados). Contanto que não haja conflito (ou seja, desde que cada arquivo seja modificado apenas de um lado entre as sincronizações), o Unison mesclará as alterações nos dois lados.
Para configurar o Unison, use a GUI ou crie um arquivo de preferências chamado ~/.unison/chef.prf
contendo
root = /var/chef
root = server.example.com:/var/chef
times = true
Execute unison -auto chef
para sincronizar as duas árvores.
Em vez de sincronizar arquivos, você deve colocar seus arquivos em controle de versão . Quando você fizer alterações, confirme-as no repositório. Para implantar suas alterações, verifique-as no servidor.