Fazendo um Merge sem fazer besteira
Existem alguns sistemas de controle de versão bastante conhecidos, dentre os quais ressaltamos o CVS (o mais antigo e tradicional) e o Subversion (para mim, e outros mais, o melhor e mais avançado). Na Riopro utilizamos o Subversion para manter a rastreabilidade das classes e documentações utilizadas em nossas aplicações.
Um sistemas de controle de versão permite que além da versão estável e principal (por padrão o diretório trunk) a criação de diversos ramos, os chamados Branches. Com isso temos a liberdade de criar modificações mais drásticas (como passar da versão 1 para a versão 2 de uma aplicação) sem afetar os usuários/clientes que utilizam a versão estável, e ao mesmo tempo mantendo o versionamento para esse ramo. Um dos momentos mais complicados ao usar um sistemas de controle de versão de arquivos é o momento de realizar o Merge entre diferentes ramos ou de um ramo com o diretório principal. É disso que trataremos nesse artigo.
Usaremos para o nosso artigo o Team com o Subclipse, que são plugins do Eclipse e fornecem interface integrada tanto para o Subversion. Existem outros clientes para o Subversion, como o excelente TortoiseSVN (que para mim é o melhor existente para o Windows) também da Tigris, como o Subclipse. Outro ótimo cliente é o SmartSVN, que tem como principal virtude ser feito em Java, e portanto ser portável, além de leve.
O Merge é usado principalmente para 2 coisas: atualizar um ramo com alterações feitas no diretório principal ou em outro ramo, ou para fazer a atualização mais profunda da aplicação (passar um ramos para o diretório principal).
TENHA SEMPRE MUITO CUIDADO AO FAZER UM MERGE, E DE PREFERÊNCIA, FAÇA UM BACKUP DO REPOSITÓRIO ANTES. ESSE ARTIGO NÃO GARANTE EM NENHUMA HIPÓTESE QUE SEU MERGE TERÁ SUCESSO. UTILIZE AS INFORMAÇÕES AQUI DISPONIBILIZADAS POR SUA CONTA E RISCO.
Mãos na massa. Na hora de fazer o Merge, sempre fico em dúvida sobre qual a maneira mais garantida de proceder. Por isso, vamos a um exemplo prático da migração de um ramo para o diretório principal, que para mim é sempre o momento mais crítico.
Digamos que tenhamos aberto um branch que chamaremos de NOME_DO_BRANCH. Após realizarmos todas as modificações e aprovarmos, vemos que é hora de passa-lo para o trunk.
Todas as últimas modificações do NOME_DO_BRANCH já foram realizadas e comitadas. A primeira coisa que fazemos, então, é voltar o nosso repositório para usar o trunk. Fazemos isso utilizando o Switch to Another Branch/Tag. Estando com a nossa versão atual no HEAD do trunk, o que queremos agora é trazer todas as atualizações feitas no NOME_DO_BRANCH para o trunk.
Escolhemos então MERGE para juntar os dados. Na URL do From, devemos colocar a URL do trunk e marcar a HEAD (para dizer que estamos juntando à última cópia). Para a URL To devemos colocar o endereço para o branch e marcar HEAD também, para que realizemos a junção com a última versão do branch.
Antes de prosseguir, fazemos primeiro fazemos um Dry Run para verificar se existe algum conflito. Em não havendo, podemos clicar no Merge (se houver conflito, a verificação dos arquivos é manual e o mesmo vai apontar os conflitos).
Após realizarmos o Merge, o Subversion terá alterado apenas a nossa cópia. Podemos então compilar tudo, realizar os testes necessários para validar a versão “conjunta”. Em estando válida, simplesmente fazemos um COMMIT e a versão do trunk será atualizada para ser compatível com a versão do NOME_DO_BRANCH.




Não entendi nada.
Uns exemplos ajudariam.