Eu tenho trabalhado nisso por vários dias e, não importa o que eu faça, não posso fazê-lo funcionar. Eu li praticamente todos os Q & A na rede do StackExchange sobre o rsync, mas ainda não encontrei a resposta.
Basicamente, estou escrevendo uma ferramenta de implantação de site e ele usa o rsync para mover arquivos de um repositório Git de origem para implantar o Git repo; o destino. Comprometer-se com o repo implantar realmente implanta o código para o servidor web, então eu estou atrasando com o rsync entre dois diretórios diferentes.
É muito importante que todos os arquivos que o desenvolvedor excluiu no repositório de origem também sejam excluídos no repositório de implantação. No entanto, há arquivos selecionados que estão no repositório de implementação que precisam ser não excluídos. Especificamente, são arquivos fornecidos pelo provedor de hospedagem e necessários na produção, mas que são problemáticos para serem mantidos no repositório de origem.
Eu entendo pelo que li em man
, aqui e em outros lugares, se eu adicionar os nomes dos arquivos que estão no repositório deploy / destination que eu quero manter em um arquivo --exclude-from
Aqui está o que eu estou fazendo, basicamente:
rsync --archive --verbose \
--exclude ".git" --exclude ".git*" \
--exclude-from="/tmp/excludes.txt" --delete-after \
/dir/to/source/repo/ \
/dir/to/deploy/repo
E, por exemplo, vamos dizer que este é o conteúdo de /tmp/excludes.txt
:
/foo/bar/baz.php
Agora, quando eu tentei isso usando um exemplo trivial localmente, sempre parece funcionar como esperado. Mas quando eu usá-lo com o CircleCI em um cenário de implantação no mundo real, rsync
sempre exclui /foo/bar/baz.php
depois de executar o comando acima.
Você pode ver o que estou fazendo errado? Agradecemos antecipadamente.
UPDATE - O ACIMA FUNCIONA
Acontece que a lógica no meu script em execução no CircleCI era a culpa, e eu simplesmente não conseguia ver. Eu estava executando vários comandos rsync com diferentes raízes (essencialmente subdiretórios da minha raiz principal) por causa das diferentes regras necessárias, e uma lista de excluir arquivos com caminhos de arquivos que eram todos baseados na raiz principal. Ugh.
De qualquer forma, querido leitor, o resultado é que o exemplo acima funciona, na verdade, descrevendo como eu queria que funcionasse.