Pergunta

Eu apenas herdei um projeto que foi mantida usando Git. Em certo ponto, o código foi implantado em 3 sistemas separados e cada sistema mantiveram a sua própria respository GIT descentralizada.

Cada um dos 3 sistemas estendida do sistema de base original em 3 sentidos diferentes. Nenhum dos 3 sistemas foram sincronizados uns contra os outros. Algumas mudanças estão no branch master, outros estão em novas agências.

Como posso trazer os 3 fontes diferentes em conjunto para que eu posso:

  1. encontrar uma base comum para trabalhar com;
  2. descobrir quais mudanças são correções de bugs que devem ser aplicados em todos os 3 sistemas; e
  3. manter os 3 sistemas de uma forma sã de modo que não é apenas um ramo comum e separar as personalizações necessárias para os 3 sistemas diferentes?
Foi útil?

Solução

Eu provavelmente começar por empurrar todos os repositórios para ramos separados em um repositório central, a partir do qual eu possa rebase, fundir etc entre os ramos facilmente.

Uma ferramenta boa visualização, como git-idade , gitnub , gitx , risadinha pode fazer maravilhas, mas a sua tarefa será, provavelmente, um pouco entediante, a menos que você puder encontrar os pontos de ramificação. Se há manchas semelhantes aplicada a todos os ramos que você pode usar (interativo) rebase para reordenar seus commits tais que eles estão na mesma ordem. Então você pode começar 'fechando' os seus ramos, movendo-se o ponto de ramo para cima, colocando commits em mestre. Uma descrição agradável sobre como commits reordenamento usando rebase podem ser encontrados aqui .

As possibilidades são as ações que você precisa tomar são descritos nos links fornecidos pelo Git Índice Howto . Um bom Cheat Sheet é sempre bom ter ao seu alcance. Além disso, eu suspeito que o acompanhamento de Eric Sinks post " DVCS e DAGs, Parte 1 " irá conter algo de útil (Ele não sabia, mas era um nontheless leitura interessante).

adicionais boa de se ter links são: Git Magia , Git Pronto e Guia SourceMage Git

Espero que todos os repos teve boa cometer mensagens que indicam o propósito de cada patch, é isso ou revisão de código:)

Quanto à forma de manter personalizações que tivemos sorte com o seguinte:

Começámos por separação (ou manter separado) o código personalizado a partir do código genérico. Então nós tentamos duas abordagens; tanto que funcionou bem:

  1. Todas as implantações tem seus próprios repositórios onde a personalização foi mantido.
  2. Todas as implantações tem seu próprio ramo em um 'customization'-repositório.

Depois da primeira implantação e vendo que o segundo foi um fato passamos algum tempo tentando prever personalização futuro / corte pontos para reduzir a duplicação através dos repos personalizados (alt. 1, que é a abordagem que actualmente uso) e na base / repo núcleo.

E sim, nós tentamos refatorar impiedosamente sempre que notar a divisão core / personalização escorregar:)

Outras dicas

OK. Depois de um grande de um trabalho árduo, eu consegui fazê-lo. Para qualquer outra pessoa embarcando em uma tarefa semelhante, ele vai envolver um monte de:

git rebase

comandos e quando as coisas deram errado:

git reflog

seguido de

git reset --hard HEAD@{ref}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top