
Existem dois hospedeiros A e B.
A serve Git e recebe rotações enviadas de B.
B apenas empurra e nunca recebe, a não ser que puxe sozinho.
Pode-se definir B para GC ou reduzir as rotações porque não há medo de operações simultâneas; no entanto, B pode empurrar as rotações para A enquanto A está fazendo GC ou podando? O que acontece?
Basicamente, quero saber se devo destruir as comunicações de A ao executar GCs ou ameixas, ou não há necessidade disso.
Responder1
Git GCpágina de manualestado:
Se git gc for executado simultaneamente com outro processo, existe o risco de ele excluir um objeto que o outro processo está usando, mas para o qual não criou uma referência. Isso pode apenas causar falha no outro processo ou corromper o repositório se o outro processo adicionar posteriormente uma referência ao objeto excluído. O Git possui dois recursos que atenuam significativamente esse problema:
Qualquer objeto com hora de modificação mais recente que a data --prune é mantido, junto com tudo que pode ser alcançado a partir dele.
A maioria das operações que adicionam um objeto ao banco de dados atualizam o horário de modificação do objeto se ele já estiver presente, para que o número 1 se aplique.
No entanto, esses recursos ficam aquém de uma solução completa, então os usuários que executam comandos simultaneamente têm que conviver com algum risco de corrupção (que parece ser baixo na prática).
E mais:
--prune=<date>
Remova objetos soltos anteriores à data (o padrão é 2 semanas atrás, substituível pela variável de configuração gc.pruneExpire).
--prune=now
remove objetos soltos independentemente de sua idade e aumenta o risco de corrupção se outro processo estiver gravando no repositório simultaneamente; veja "NOTAS" abaixo. --prune está ativado por padrão.
Então sim, existe um risco. No entanto, se os relógios de A e B estiverem razoavelmente sincronizados e os comandos Git que você aplica ao repositório não levarem mais de duas semanas para serem concluídos, eu consideraria o risco de enviar simultaneamente para e fazer GC no mesmo repositório como sendo aceitável.