Olá Pessoal, tudo bom?
Há 3 anos atrás construí uma serie de artigos sobre versionamento de Projetos de Software, mas nunca mais mudei esses artigos ou acrescentei coisas novas. Essa é uma nova série, com todas as atualizações que a ferramenta do Bitbucket e do Eclipse sofreram nesses últimos 3 anos. Para ver todos os artigos sobre versionamento acesse esta página. Lá haverá um mapa mental com todos os artigos. Esse artigo mostra como copiar arquivos entre branches do mesmo repositório via Bitbucket. Veja na continuação.
Contextualizando o problema…
Suponha que todas as alterações necessárias para uma determinada funcionalidade foram encerradas em uma branch que atualmente está sendo trabalhada. Por exemplo, na branch model foram finalizados todos os testes para verificar as regras negociais do diagrama de classe e agora vamos avançar para a próxima parte que é a construção da validação da integridade das informações. Para a próxima parte o que deve ser feito?
O mais provável que iremos fazer é criar uma nova branch local. Após criarmos a nova branch local, o que faremos então? Realizaremos a operação de Pull.
Se você realizou esses passos irá perceber um pequeno problema:
Seus arquivos criados no outro branch, sumiram no novo branch!!!
Sim, eles sumiram… Não, na verdade não sumiram… Eles ainda estão na branch anterior, acessando a operação Team > Switch To > BranchAnterior você conseguirá acessá-los.
O que realmente aconteceu?
Toda a criação de um branch, provém de algo que já possuía um histórico de versões de arquivo, ou seja, ou o branch vem de um momento do Head, ou vem de um momento de outro branch. O momento quer dizer a versão dos arquivos que se encontram em um determinado momento do tempo do projeto. Assim ao criar um branch você está copiando para este as versões que um arquivo possui. Veja na Figura 01 um exemplo disso.
Na Figura 01 são mostrados três branches. Head, que também é um branch por assim dizer, Model e Business. Em um momento da vida do projeto, foi criado o branch Model a partir das informações que existiam em um determinado momento no Head. Da mesma forma o branch Business foi criado em um determinado momento da história do branch Business.
Perceba também que a vida de cada branch continuou com novos commits para cada um deles. O que isso tem a ver com o problema do sumiço dos arquivos? Na verdade tem tudo a ver. Suponha que você estava commitando alterações no branch Model, assim com esses commits você acabou criando uma história própria para esse branch, ou seja, novos arquivos e outras coisas foram acrescentadas nele e somente nele, indicando que os outros branches não possuíam essas alterações. Assim ao mudar sua visão para outro branch, isso significa que você não está visualizando mais a história do branch Model, para desse branch que você mudou, que não possui as alterações que você realizou no branch Model.
Assim para contornar esse problema você precisa enviar os arquivos que estão no branch model para o branch destino, por exemplo, o branch Business. Esse artigo irá mostrar como realizar isso via Bitbucket.
Copiando arquivos entre branches do mesmo repositório
Para realizar a cópia dos arquivos acesse o seu repositório no site Bitbucket. No menu lateral clique no ícone mais (+) conforme marcado na Figura 02
Ao clicar o Bitbucket mostrará o submenu conforme Figura 03. Selecione a opção Compare branches or tags.
Agora na tela de Compare, Figura 04, você possui um desenho de duas setas, uma cinza a outra azul e quatro combo boxes.
O desenho representa a origem e o destino. A primeira linha e consequentemente o desenho da linha cinza representa o branch destino, aquele que sofrerá as alterações dos novos arquivos. A segunda linha e consequentemente o desenho da linha azul deste representa o branch origem, aquele que será a base, indicando os arquivos novos, os arquivos que não existem mais ou os arquivos que foram modificados.
As combo boxes são “divididas” em duas colunas. A primeira coluna representa o repositório. Existem dois repositórios em sua hierarquia de repositórios, ou seja, o repositório original do fork e o seu. Neste artigo estamos trabalhando apenas com o seu repositório, assim selecione em ambos os combos da primeira coluna, o seu repositório.
A segunda coluna representa os branches (model, business, etc…). Aqui você deve escolher os dois branches que serão utilizados na operação. O branch da primeira linha será o branch destino, assim pensando no exemplo será o branch Business. O branch da segunda linha será o branch origem, no caso do exemplo, será o branch model. Escolhido todos os pontos, sua tela deverá ser parecida com a da Figura 05.
Escolhidos os branches, é hora de clicar no botão Compare. Aparecerá a tela exibida pela Figura 06. Poderá aparecer uma mensagem “N commits behind business. Sync now“. Não clique nesse link! Isso poderá quebrar o seu branch.
Ao clicar sobre a aba Diff, aparecerão as classes que estão diferentes na comparação conforme mostra a Figura 07. Repare que aparecem quais foram os arquivos modificados e abaixo aparecem as linhas de código que foram modificadas na comparação entre os branches. As linhas verdes representam linhas adicionadas, as linhas vermelhas representam linhas removidas. Repare também que existe a numeração de cada linha.
Agora você irá clicar no botão Merge, no canto superior direito da tela, será exibida a popup Merge Changes conforme Figura 08. Note quem é o branch source (origem) e quem é o branch destination (destino). Além disso já aparecerá a mensagem “Merged model into business“. Caso apareça o contrário “Merged business into model” NÃO FAÇA A OPERAÇÃO DE MERGE.
Clique no botão Merge para que o Bitbucket realize a operação de cópia dos arquivos do branch model para o branch business. Ao fim da operação será exibida a tela Commit novamente, com os arquivos que foram modificados novamente em verde e vermelho, conforme a Figura 09.
Agora é possível no Eclipse realizar as operações Team > Switch To para o branch destino. E após isso a operação de Team > Pull, puxando os novos arquivos para o branch business local e para o seu workspace. Ao fim da operação de Pull será exibida a dialog Pull Result. Repare na primeira frase dos commits: “Merged model into business”. Clique no botão OK e seu branch business estará atualizado com as últimas classes do seu branch model.
finally{
Neste tutorial foram cobertos os itens relacionados aos merges de arquivos entre branches criados anteriormente.
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Wagner Eugênio says
Parabéns… Melhor tutorial que li sobre o bitBucket desde que implantei o mesmo no sistema da minha empresa!
Seu site foi para os favoritos já.
Obrigado por compartilar o conhecimento.
Mauda says
Olá Wagner, tudo bom?
Massa! Obrigado pelo incentivo! São comentários assim que me motivam a continuar escrevendo. Precisando estamos aqui! Obrigado! Abs. Mauda
Josias says
Muito bom a sua serie falando sobre GIT e BitBucket, retirou muitas das dúvidas minhas, Agradecido e parabéns pela serie. 🙂
Mauda says
Olá Josias, tudo bom?
Obrigado pelo feedback! Fico feliz que tenha sido útil!
Precisando estamos aqui!
Obrigado
Mauda
Josias says
… Referente a opção snippets do bitbucket você sabe qual o objetivo de tal opção, para que é ou deve ser utilizada. ?
att Maceda
Mauda says
Olá Josias, tudo bom?
O snippets é uma funcionalidade para você deixar trechos de códigos para visualização por pessoas, mesmo as que não tem acesso ao seu repositório, pois é algo inerente a este.
Obrigado.
Mauda
Alice says
Tutorial massa!
Muito obrigada!!
Mauda says
Olá Alice, tudo bom?
Obrigado pelo feedback!
Precisando estamos aqui!
Obrigado.
Fernanda Melo says
Não estava vendo o tutorial pra usar com Eclipse, mas como os processos são os mesmo praticamente eu amei!
Li tudo mesmo! Você é muito foda!
Valeu!
Mauda says
Olá Fernanda, tudo bom?
Obrigado pelo feedback! Poderia somente me esclarecer para o que você esta utilizando? Assim posso adicionar essa característica também ao tutorial.
Precisando estamos aqui!
Obrigado.
Fernanda Melo says
Usei para o XCode.
Obrigada! 😀
Renan Resende says
Nunca valeu tanto a pena ir até a página 3 de resultados do google em busca de um tutorial! Li toda a série do Bitbucket e sanou todas as minhas dúvidas, muito obrigado. Já está no favoritos e em breve vou ler a parte de certificação também! Abraços!
Mauda says
Olá Renan, tudo bom?
Muito obrigado pelo feedback! Bom saber que tudo foi útil para ti.
Precisando estamos aqui.
Obrigado.
Abdul Sacur says
Muito Obrigado é disto que estava precisando.
Mauda says
Olá Abdul, tudo bom?
Obrigado pelo feedback!
Continue visitando o site quando puder e precisando estamos aqui!
Obrigado