===== Trabalhando com Merge no subversion ===== ==== Conhecendo a Solução Copy-Modify-Merge ==== O modelo Copy-Modify-Merge (Copiar-modificar-fundir) é uma alternativa que permite a dois ou mais usuários trabalharem no mesmo projeto simultaneamente. Com o Copy-Modify-Merge cada usuário se conecta ao repositório e cria uma cópia de trabalho local. Os usuários então trabalham simultaneamente e independente modificando suas cópias de trabalho. === Exemplo === Neste exemplo vamos imaginar que temos dois programadores, Carlos e José, trabalhando no mesmo projeto, eles estão trabalhando simultaneamente cada qual em sua cópia de trabalho local, vamos supor que Carlos salvou a suas alterações primeiro no repositório, mais tarde quando José tentar salvar suas alterações o repositório vai retornar o erro out-of-date que significa que os arquivos estão desatualizados ou seja ocorreram alterações desde a última vez que esses arquivos foram copiados, então José deve pedir ao seu software cliente a ajuda-lo fundir (Merge) as alterações realizadas na sua cópia local com a cópia do repositório. Caso as alterações de José sobrescreverem as alterações de Carlos será gerado conflitos, sendo assim o software cliente deverá sinalizar de alguma forma os pontos conflitantes e José manualmente deverá escolher quais alterações devem permanecer no código fonte. ==== Implementando a solução com o client Tortoise ==== === Realizando o Merge === Com o Tortoise, a fusão dos arquivos é realizada com o comando update, portanto se um dos usuários tentar salvar as alterações no repositório com o comando commit e receber o erro out-of-date ele deverá recorrer ao comando update para atualizar a sua cópia local e depois que a fusão for devidamente realizada ele poderá salvar a sua cópia atualizada no repositório. {{:out-of-date.png|}} {{:update.png|}} === Resolvendo conflitos === Quando as alterações realizadas sobrescreverem as atualizações do repositório resultará em uma situação de conflito e o Tortoise indicará ao usuário quais os arquivos envolvido, a partir dai o usuário deverá manualmente decidir quais alterações devem permanecer no código fonte. {{:merge_conflito.png|}} * Os Itens destacado em verde indicam que foram fundidos com sucesso. * Os Itens em vermelho apresentaram conflito. Os conflitos são tratados por arquivo, através da opção "Edit Conflicts" {{:edit_conflits.png|}} A tela de edição de conflitos é dividida em três partes; - Theirs : Os dados do arquivo no repositório. - Mine : Os dados do arquivo na minha cópia de trabalho local. - Merged : Fusão entre os dois arquivos. {{:conflito.jpg|}} Os pontos em vermelho são os pontos conflitantes, para definir qual o bloco de comando utilizar no arquivo final, "uma das formas" é selecionar o bloco desejado, clicar com o botão direito e escolher a opção use this Text block. {{:usethis.png|}} Após resolver todos os conflitos basta clicar na opção Mark as Resolved {{:marksolved.png|}}