Integrar Ramificações entre dois ou mais Projetos do GIT.

Quando estamos desenvolvendo nos deparamos com diversos problemas, e esta é a parte onde evoluímos, nem sempre sabemos o que realmente deve ser feito, nem quando temos a necessidade de migrar um projeto para outro, então, chegamos no real objetivo deste POST.

Vejamos como exemplo os seguinte projetos:

Projeto A:

Projeto B:

Projeto C:

Estória:

Os Projetos tem a mesma finalidade, mas são de clientes diferentes, houve necessidade de pegar a ramificação (brach) ‘hml’ do projeto A e colocar no projeto C, e depois pegar a ramificação (branch) ‘new-feature’ do projeto B e colocar no projeto C.
Para isto vamos utilizar o terminal e os comandos que o GIT nos forneçe.

Para iniciar-mos vamos abrir o terminal e aponta-lo para o diretório referente ao projeto C:

Suponha-se que a branch master do projeto C é a atualizada, então vamos criar uma branch a partir dela chamada sync-from-projects

Agora vamos criar a ramificação que precisamos do projeto A…

Antes, vamos entender:

Existem duas formas de criar a, ou, as ramificações:

1º Formato:git remote add [-f] <nome-do-ramo> <url>

A expressão git remote add, como a própria expressão indica, é o comando de adição remota do git.
A expressão [ -f ] significa ‘fetch’, no caso em específico é utilizado para indicar todas as ramificações existente do projeto A para serem adicionadas ao projeto C.
O <nome-do-ramo> é o nome que deseja nomear as ramificações, nome que será a identificação das branches do projeto A no projeto C.
Por último temos a <url> que nada mais é que a url do repositório git, no caso em específico, a url do repositório do projeto A.

Exemplo:

Cuidados a serem tomados:

  • Por exemplo, se o projeto A tivesse 100 ramificações teria sido criado 100 ramificações remotas, uma para cada, no projeto C.
  • Se por acaso uma ramificação tenha sido criada remotamente e você deseja retira-la do projeto C, “ESQUEÇA”, quando o processo anterior é executado, ele só pode ser desfeito por completo, e não por parte. Se por acaso uma ramificação criada no processo for deletada do projeto C, a branch original referente a ramificação será deletada do repositório original, no nosso caso, por exemplo, se por acaso a ramificação develop -> project-a/develop , for deletada do projeto C, a branch referente a mesma será deletada do projeto A.
  • Caso seja preciso desfazer o processo anterior, deve ser utilizado o comando: git remote rm <nome-do-ramo>
    Exemplo: git remote rm project-a

NOTA:
Observem que desta forma todo o processo anterior é desfeito, sendo retirada com segurança todas as ramificações criadas no projeto C sem haver nenhum dano ao projeto A.

2º Formato: “git remote add [-t] <nome-da-branch> <nome-do-ramo> <url>

A expressão [ -t ] da o significado para a branch.
A expressão <nome-da-branch> significa a branch que deseja ramificar, no nosso caso, será a branch hml do projeto A.

Para o nosso exemplo temos que utilizar uma relação entre os dois formatos.
Exemplo: git remote add -f -t hml projeto-a https://admin@bitbucket.org/projeto/project-a.git

Desta forma estaremos criando apenas uma ramificação remota no projeto C, referente a branch hml do projeto A.

Feito este processo, agora vamos fundir os projetos:


Para poder fundir a ramificação project-a/hml a branch sync-from-projects, vamos utilizar o camando: git merge <nome-do-ramo>/<nome-da-branch>

O Processo foi finalizado com sucesso, mas deve-se notar que normalmente ao fazer este processo, ‘Conflitos’ existiram, e devem ser corrigidos.

Agora basta fazer o mesmo processo para criar uma ramificação da branch ‘new-feature’ do projeto B para o projeto C.

NOTA:
Neste Caso, as branches estavam atualizadas, por isso não houve ocorrências.

Conclusão

Para se fundir dois ou mais projetos, basta ter 3 coisas importantes:

  • CUIDADO
  • PACIÊNCIA
  • MUITO CAFÉ

Espero que tenham gostado e até o próximo Post!!!