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!!!