rsync - lista de arquivos incremental enviada mas arquivos não atualizados no servidor

1

Estou trabalhando com alguns arquivos de origem de um computador desktop. Os arquivos de origem são compilados e executados em um servidor remoto.

Como há um atraso significativo entre mim e o servidor, decidi usar rsync para copiar os arquivos para o meu computador, editá-los e sincronizá-los novamente usando rsync .

No entanto, há um problema ... rsync não atualiza os arquivos quando eu os sincronizo de volta para o servidor depois de editá-los no meu final. A lista de arquivos incrementais é enviada, mas o conteúdo do arquivo não é modificado.

Aqui está uma saída completa da minha sessão de bash, que explicará em detalhes o que acontece.

  • Eu tenho alguns arquivos na minha máquina local. Eu edito um desses arquivos, usando um editor como vim . A estrutura do arquivo é bastante genérica. Eu tenho um diretório raiz do projeto chamado 2016-07-01 , que contém muitas subpastas e arquivos de origem. A pasta é nomeada apenas com a data como um método de controle de versão.

(bash)

$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
user@server's password: [enter password] 
sending incremental file list
2016-07-01/subfolder/
2016-07-01/subfolder/main.cpp

sent 2,238 bytes  received 272 bytes  557.78 bytes/sec
total size is 632,957  speedup is 252.17
  • Parece que main.cpp foi atualizado, mas quando eu ssh no servidor e abri-lo com vim , vejo que não é alterado. Por que isso está acontecendo?

  • Eu, então, executo o mesmo comando novamente e a saída a seguir é produzida ...

(bash)

$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
user@server's password: [enter password] 
sending incremental file list

sent 1,342 bytes  received 36 bytes  110.24 bytes/sec
total size is 632,957  speedup is 459.33
  • Desta vez, nenhuma lista de arquivos incremental é enviada - não sei por que - é como se rsync pensasse que já atualizou os arquivos e, portanto, não faz nada quando não ...

  • Se eu verificar main.cpp no meu final, definitivamente foi alterado.

  • main.cpp no lado do servidor não foi alterado.

Eu também tentei usar o sinalizador -c para somas de verificação em vez de carimbos de data e hora, novamente o mesmo resultado é visto.

    
por user3728501 08.07.2016 / 20:59

1 resposta

1

Em suma, isso é não o comando correto ...

$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01

Este é o comando correto ...

$ rsync -av ./2016-07-01 user@server:./path-to-project

Nota, nenhuma barra ou nome de diretório para o destino - quando estes são deixados de fora rsync criará o diretório conforme necessário. Eu acho que o / e 2016-07-01 implicam 2 coisas diferentes devem ser feitas. Não / significa criar diretório. Não tenho certeza de qual é o efeito de adicionar / remover o 2016-07-01 se o / estiver lá. Talvez alguém possa esclarecer isso.

Observe também que há três maneiras de endereçar o destino no servidor remoto.

  • Usando o método acima, iniciando o endereço com . . O comando rsync é padronizado para o diretório inicial dos usuários, portanto, esse caminho relativo para o diretório inicial funciona.

  • Também é possível digitar o caminho absoluto completo do diretório raiz. Para mim, isso é algo como /afs/servername/u/username/rest_of_path_from_home_dir

  • Por fim, usar a expansão ~ como um atalho para o acima também funcionará.

por 09.07.2016 / 01:37