Atualmente, estou procurando a melhor maneira de configurar um espelho SVN. Atualmente, vejo três possibilidades, todas com suas próprias desvantagens:
- Tenha um SVN pós-commit-Hook que esteja bloqueando e sincronizando via svnsync. O problema aqui é obviamente que a confirmação está bloqueando até que os dados sejam transferidos para o espelho.
- Tenha um SVN pós-commit-Hook que não esteja bloqueando e sincronizando via svnsync. Aqui, vejo o seguinte problema mais sutil: imagine alguém fazer check-in em um arquivo BIG e outra pessoa logo em seguida faça check-in em um arquivo pequeno. Como a confirmação é sem bloqueio, dois processos svnsync podem estar em execução ao mesmo tempo e o arquivo pequeno pode ultrapassar o arquivo BIG no caminho para o espelho (isso parece muito crítico em termos de tempo e improvável, embora possível em princípio). A revisão deles seria trocada.
- Sincronize como a cada quinze minutos com um cron-job. O mesmo problema se uma confirmação demorar mais de 15 minutos e, obviamente, esse atraso.
Eu esqueci uma possibilidade? Eu entendi algo errado? Alguma ideia? Obrigado já!
Talvez eu deva notar que a segunda possibilidade é a sugerida por diferentes sites. Por exemplo, consulte http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync
Respostas:
Você pode tentar uma abordagem semelhante à que usamos na Atlassian
https://www.atlassian.com/blog/archives/subversion_replication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727
isenção de responsabilidade: Atualmente, sou um funcionário da Atlassian, mas não estava envolvido na implementação desta solução (apenas a manutenção)
Como eu disse acima no comentário, svnsync, run a partir de um repositório remoto se comporta deterministicamente. Ele não pode aplicar conjuntos de alterações fora de ordem. Portanto, o único problema que você tem ao usar um repositório remoto é a quantidade de atraso devido à propagação do changeset.
fonte