a obtenção do código-fonte, dos arquivos e do dump são "obtidas a partir" do sistema externo, e não "enviadas para" o sistema externo
No meu caso, de aplicações e sistemas pequenos, o intervalo de um dia para os backups é perfeitamente aceitável. Ainda mais considerando o que segue:
No caso do código-fonte, sempre existirá alguma(s) outra(s) cópia(s) em outro(s) lugar(es), pois afinal há o trabalho do desenvolvedor em andamento.
No caso dos arquivos de upload, em geral quem fez o upload ainda tem o arquivo no dia seguinte - ainda mais se for importante. (Detalhe: uso a opção do rsync que não apaga arquivos no espelho caso tenha sido removido na origem.)
No caso do banco de dados, além do backup, eu também deixo ativado o log binário - feature do MySQL que vai registrando todas as operações (queries) que alteram dados, incluindo a data e hora em que foram feitas. Juntando o backup diário com o log binário, posso restaurar o banco de dados para qualquer momento exato no tempo. Eu já tive que fazer isso uma vez ("rebobinar o BD para um ponto no tempo") e fui bem-sucedido.
Para apagar os backups antigos dos bancos de dados, eu não tenho nada automatizado. Eu mesmo venho fazendo a manutenção manualmente. Mas isso não é recomendável. A estratégia melhor aqui é simplesmente automatizar esse processo também. Por exemplo: dos backups diários, manter um por mês apenas, se for anterior a 30 dias, até um máximo de 6 ou 12 meses atrás.
Já o repositório armazena todo o histórico, como qualquer repositório de código-fonte. E o espelho dos arquivos não tem histórico - é um espelho (apesar de manter arquivos deletados).