A solução git deve funcionar bem com ramificações para cada compilação
- Desenvolver
- Teste
- Produção
O ramo relevante pode ser reencaminhado para o novo ponto de cada vez, tornando mais fácil manter as 3 versões sincronizadas.
Exemplo
(1 | DTP)
Você adiciona dois commits para desenvolver
(1 | TP) - > (2) - > (3 | D)
Uma vez que você está feliz, você avança rapidamente os testes para desenvolver
(1 | P) - > (2) - > (3 | DT)
Uma vez que você está feliz com isso, você avança a produção para testes
(1) - > (2) - > (3 | DTP)
Os commits aqui podem ser mesclados em ramificações de recursos ou qualquer fluxo de trabalho que você preferir
Quanto ao upload, você pode puxar o servidor, ou se você não pode obter um shell, você pode ter um script de verificação de cada ramo e empurrá-lo para o servidor relevante automaticamente.
Se todos eles forem servidores da web, você poderá usar um servidor como o caddy com um plug-in como este , que será automaticamente sincronizar-se com o seu repo, então o script seria desnecessário