git-sync
- Maior desempenho
- Com base nas versões modernas do bash e do awk (precisam ser atualizadas no Mac OS)
- Difícil de modificações.
- Exclusão e criação de ramificações em outro repositório.
- Mais robusto para recriar a sincronização de qualquer posição e a partir do zero.
- Preparado para uma automação de notificação adicional.
- Um único repositório Git não-nulo é usado para sincronização.
Pure Git com Convenção sobre o Git
- Muito mais personalizável
- É mais lento
- Se você se comprometer com outro lado durante a sincronização, esse commit poderá ser rejeitado (precisa de uma segunda tentativa)
- Dependências tecnológicas mínimas
- Você não pode excluir ramificações do outro lado.
- Repositórios Bare Git são usados para sincronização.
Notas comuns
- Não depende da implementação do Git-server.
- Tem proteção contra exclusões ocasionais.
- Testado em uma produção por um longo tempo.
- A sincronização de tags Git foi removida porque o GitLab adora bloquear a exclusão da tag.
- Failover & a recuperação automática da sincronização é suportada. Especialmente para problemas de rede.
- Projetado para cobrir centenas de casos sutis que não descrevo aqui.
Como usar
- Selecione um prefixo para cada repositório. Somente ramificações com esses prefixos serão sincronizadas. Veja abaixo Convenção de nomenclatura .
- Descreva seus dois repositórios em um arquivo de configuração simples
- Executa periodicamente o script de sincronização
- A solução é aplicada por repositório (vs por servidor). Qualquer quantidade de pares de sincronização pode ser criada.
Convenção de nomenclatura
É qualquer nome prefixado. Cada lado possui seus conflitos de prefixo e de não avanço rápido para que os refs Git prefixados sejam resolvidos em favor de um dono.
Exemplos de company1/
desenvolver, company2-
desenvolver company1/
JIRA-123, company2-
JIRA-321
Outras ideias
Abordagens para sincronizar repositórios Git remotos
A situação
Digamos que temos equipes em empresas separadas. Cada equipe possui seu próprio repositório hospedado em seu próprio servidor git separado. Isso geralmente acontece em cenários cliente-fornecedor.