#language pt

== Tutorial - Mesclando mudanças conflitantes ==

''(This page in English: [[TutorialConflict]]). Esta página é a parte 8 de 9 da série [[BrazilianPortugueseTutorial]]. A parte anterior é [[BrazilianPortugueseTutorialMerge]], a próxima parte é [[BrazilianPortugueseTutorialConclusion]])''

Nós aprendemos como lidar com [[Merge|mesclagens]] simples em BrazilianPortugueseTutorialMerge.

O Mercurial também gerencia mesclagens mais complexas.  Não é tão incomum que duas pessoas editem exatamente as mesmas linhas de um arquivo, e precisem em seguida descobrir o que fazer.  Esses casos são chamados [[Conflict|conflitos]]; determinar o que fazer em um conflito é chamado [[ResolveConflict|resolvê-lo]] .

Vamos primeiro criar uma situação de conflito artificial.  Como fizemos antes, começaremos criando um [[Clone|clone]] de `my-hello`:

{{{
$ cd ..
$ hg clone my-hello my-hello-not-cvs
updating working directory
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
}}}

Agora vamos colocar uma nova linha de saída em `hello.c`:

{{{
$ cd my-hello-not-cvs
$ vi hello.c
}}}

Nós alteramos {{{main}}} da seguinte forma:

{{{#!cplusplus numbers=off
int main(int argc, char **argv)
{
        printf("hello, world!\n");
        printf("sure am glad I'm not using CVS!\n");
        return 0;
}
}}}

E nós [[Commit|consolidamos]] a mudança:

{{{
$ hg commit -m "Give thanks for dodging bullet"
}}}

Lembre-se que em BrazilianPortugueseTutorialFirstChange nós criamos uma [[ChangeSet|revisão]] em {{{my-hello-new-output}}} que ''também'' adicionou uma segunda linha de saída.  O que acontecerá quando tentarmos fazer um [[Pull|pull]] daquela mudança para cá?

{{{
$ hg pull ../my-hello-new-output
pulling from ../my-hello-new-output
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
}}}

Até aqui tudo bem. Vamos tentar uma [[Update|atualização]].

{{{
$ hg update
abort: crosses branches (use 'hg merge' or 'hg update -C')
}}}

Como em [[BrazilianPortugueseTutorialMerge]], nós devemos executar {{{hg merge}}}.  O comando não será capaz de mesclar automaticamente, porque a mesma linha do mesmo arquivo fonte foi modificada de modo diferente em cada revisão (a que acabamos de criar com o [[Commit|commit]], e a que acabamos de trazer com o [[Pull|pull]]).

{{{
$ hg merge
}}}

Neste momento, o que acontece depende de como o Mercurial foi configurado (veja [[MergeToolConfiguration]]). Por padrão, o Mercurial insere uma série de marcadores nos arquivos a serem mesclados em sua cópia de trabalho:

{{{
/*
 * hello.c
 *
 * Placed in the public domain by Bryan O'Sullivan
 *
 * This program is not covered by patents in the United States or other
 * countries.
 */

#include <stdio.h>

int main(int argc, char **argv)
{
        printf("hello, world!\n");
<<<<<<< local
        printf("sure am glad I'm not using CVS!\n");
=======
        printf("sure am glad I'm using Mercurial!\n");
>>>>>>> other
        return 0;
}
}}}

Como antes, você pode encontrar esses arquivos usando o comando 'hg status', notando que o Mercurial gravou uma cópia do arquivo original antes de inserir os marcadores de conflito:

{{{
$ hg status
M hello.c
? hello.c.orig
}}}

Para resolver o conflito, nós abrimos 'hello.c' em um editor, apagamos os marcadores de conflito e mantemos a linha "sure am glad I'm using Mercurial!\n" line,
removendo a linha sobre o CVS. Nós podemos então salvar o arquivo e fechar o editor.

Em seguida nós informamos ao Mercurial que o conflito foi resolvido, usando o comando {{{hg resolve}}}:

{{{
$ hg resolve -m hello.c
}}}

O Mercurial aceita a resolução sem gerar uma saída na tela.

Cokmo antes, certifique-se de consolidar essa mudança no repositório assim que a mesclagem estiver completa:

{{{
$ hg commit -m "Merged changes from my-hello-new-output"
}}}

O que nós vimos aqui foi o comportamento padrão do Mercurial.
Você pode, se desejar, configurar o Mercurial para abrir o editor automaticamente.
O Mercurial pode também ser configurado para invocar utilitários externos de mesclagem de 3 vias.
Informação sobre isso pode ser encontrada em [[MergeToolConfiguration]].

Agora continuaremos e concluiremos em [[BrazilianPortugueseTutorialConclusion]].

----
CategoryBrazilianPortuguese