Differences between revisions 2 and 8 (spanning 6 versions)
Revision 2 as of 2008-02-12 18:13:47
Size: 7639
Editor: WagnerBruna
Comment:
Revision 8 as of 2010-05-02 23:06:50
Size: 4551
Editor: WagnerBruna
Comment: synchronized with English page and program translation
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
== Tutorial - merging conflicting changes == == Tutorial - Mesclando mudanças conflitantes ==
Line 5: Line 5:
''(This page in English: [:TutorialConflict])'' ''(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]])''
Line 7: Line 7:
##We learned how to deal with simple [:Merge:merges] in TutorialMerge.
Nós aprendemos como lidar com [:Merge:recombinações] simples em ../BrazilianPortugueseTutorialMerge.
Nós aprendemos como lidar com [[Merge|mesclagens]] simples em BrazilianPortugueseTutorialMerge.
Line 10: Line 9:
##Mercurial handles more complex merge cases, too. It is not all that uncommon for two people to edit the exact same lines of a file, and then have to figure out what to do. These cases are called [:Conflict:conflicts]; figuring out what to do about a conflict is called [:Resolve:resolving] it.
O Mercurial também gerencia casos mais complexos de recombinação. Não é tão incomum que duas pessoas editem exatamente as mesmas linhas de um arquivo, e então precisam descobrir o que fazer. Esses casos são chamados [:Conflict:conflitos]; determinar o que fazer em um conflito é chamado [:Resolve:resolvê-lo] .
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]] .
Line 13: Line 11:
##Let's first create an artificial conflict situation. As we did previously, let's start by making a [:Clone:clone] of {{{my-hello}}}:
Vamos primeiro criar uma situação de conflito artificial. Como fizemos antes, começaremos criando um [:Clone:clone] de {{{my-hello}}}:
Vamos primeiro criar uma situação de conflito artificial. Como fizemos antes, começaremos criando um [[Clone|clone]] de `my-hello`:
Line 19: Line 16:
updating working directory
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Line 21: Line 20:
##Now let's add a new line of output to {{{hello.c}}}:
Agora vamos colocar uma nova linha de saída em {{{hello.c}}}:
Agora vamos colocar uma nova linha de saída em `hello.c`:
Line 29: Line 27:
##We change {{{main}}} to read like this:
Line 41: Line 38:
##And we [:Commit:commit] the change:
E nós fazemos o [:Commit:commit] da mudança:
E nós [[Commit|consolidamos]] a mudança:
Line 48: Line 44:
##Recall that in TutorialFirstChange, we created a [:ChangeSet:changeset] in {{{my-hello-new-output}}} that ''also'' added a second line of output. What happens when we try to [:Pull:pull] that change in here?
Lembre-se que, em ../BrazilianPortugueseTutorialFirstChange, nós criamos um [:ChangeSet:changeset] em {{{my-hello-new-output}}} que ''também'' adicionou uma segunda linha de saída. O que acontece quando tentamos fazer um [:Pull:pull] daquela mudança aqui?
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á?
Line 62: Line 57:
##So far, so good. Let's try an [:Update:update].
Até aqui tudo bem. Vamos tentar um [:Update:update].
Até aqui tudo bem. Vamos tentar uma [[Update|atualização]].
Line 67: Line 61:
abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes abort: crosses branches (use 'hg merge' or 'hg update -C')
Line 70: Line 64:
##(see also [:Branch])
(veja também [:Branch])

##As in TutorialMerge, we have to run {{{hg merge}}}. As before, the [:MergeProgram:merge program] will be started under cover. It will usually not be able to merge automatically, because the same line of the same source file has been modified in a different way by each changeset (the one we just [:Commit:commited], and the one we just pulled).
Como em ../BrazilianPortugueseTutorialMerge, nós devemos executar {{{hg merge}}}. Como antes, o [:MergeProgram:programa de recombinação] será iniciado automaticamente. Ele tipicamente não será capaz de fazer a recombinação automaticamente, porque a mesma linha do mesmo arquivo fonte foi modificada de modo diferente por cada changeset (o que acabamos de fazer o [:Commit:commit], e o que acabamos de fazer o pull).
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]]).
Line 80: Line 70:
##At this point, what happens depends on what programs are installed on our computer. If we are provident or lucky, and have a graphical merge program installed, we will be able to see what conflicts there are between the two changes, and decide how to resolve them.
Neste momento, o que acontece depende de quais programas estão instalados em seu computador. Se somos precavidos (ou se temos sorte), e temos instalado um programa gráfico de recombinação, nós seremos capazes de ver quais conflitos existem entre os dois changesets, e decidir como resolvê-los.
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:
Line 83: Line 72:
##Below is the sample conflicts shown in vim editor on a Linux system.
Abaixo estão os conflitos do exemplo exibidos no editor vim em um sistema Linux.
Line 100: Line 87:
<<<<<<< /home/motoko/project/my-hello-not-cvs/hello.c.orig.197516148 <<<<<<< local
Line 102: Line 89:
||||||| /tmp/hello.c~base.aYR8Pf
Line 105: Line 91:
>>>>>>> /tmp/hello.c~other.F7OpXy >>>>>>> other
Line 110: Line 96:
##Mercurial is using a per-file 3-way merge. This means that there are 3 input files for merging process, and those are:
## * Local file (from current repository)
## * Other file (from repository being merged)
## * Base file (last version of file before branches separated)
Mercurial está usando uma recombinação de três vias por arquivo. Isso quer dizer que há 3 arquivos de entrada para o processo de recombinação, que são:
 * o arquivo local (do repositório atual)
 * o outro arquivo (do repositório sendo recombinado)
 * o arquivo base (a versão mais recente do arquivo antes da divergência)
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:
Line 119: Line 98:
##For more information about 3-way, see [http://revctrl.org/ThreeWayMerge ThreeWayMerge] on the [http://revctrl.org/ Revctrl wiki].
Para mais informações a respeito da recombinação de 3 vias, veja [http://revctrl.org/ThreeWayMerge ThreeWayMerge] no wiki [http://revctrl.org/ Revctrl] .
{{{
$ hg status
M hello.c
? hello.c.orig
}}}
Line 122: Line 104:
##Else, if we do not have a graphical merge program installed, we will be dropped into a text editor, which will be visiting the file we need to merge. Doing this by hand is '''highly''' error-prone and tedious. It is best to exit the editor and use the {{{hg rollback}}} command to reverse the effect of the pull, then install a merge program, and then try again.
Caso não tenhamos instalado um programa gráfico de recombinação, será executado um editor de texto, que irá abrir os arquivos conflitantes um a um. Fazer isso à mão é '''altamente''' entediante e falível. É melhor sair do editor e usar o comando {{{hg rollback}}} para reverter os efeitos da recombinação, instalar um programa de recombinação, e tentar novamente.
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.
Line 125: Line 107:
##(~-Note: before Mercurial version 0.9, `hg update -m` should have been used in place of `hg merge` and `hg undo` should have been used instead of `hg rollback`-~).
(~-Nota: em versões anteriores ao Mercurial 0.9, `hg update -m` deve ser usado ao invés de `hg merge` e `hg undo` deve ser usado ao invés de `hg rollback`-~).
Em seguida nós informamos ao Mercurial que o conflito foi resolvido, usando o comando {{{hg resolve}}}:
Line 128: Line 109:
##(~-Note: what do we do with the remaining unnecessary additional file hello.c.orig?-~). {{{
$ hg resolve -m hello.c
}}}
Line 130: Line 113:
##As before, be sure to commit this change to the repository once the merge is complete:
Como anteriormente, esteja certo de fazer o commit dessa alteração para o repositório, uma vez que a recombinação esteja concluída:
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:
Line 137: Line 121:
##There shouldn't be any output from this command.
Este comando não deve gerar uma saída.
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]].
Line 140: Line 126:
##Now let's continue and finish on to TutorialConclusion.
Agora continuaremos e concluiremos em ../BrazilianPortugueseTutorialConclusion.
Agora continuaremos e concluiremos em [[BrazilianPortugueseTutorialConclusion]].
Line 143: Line 128:
##See also: ImergeExtension
Line 145: Line 129:
CategoryTutorial CategoryBrazilianPortuguese

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 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 conflitos; determinar o que fazer em um conflito é chamado resolvê-lo .

Vamos primeiro criar uma situação de conflito artificial. Como fizemos antes, começaremos criando um 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:

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 consolidamos a mudança:

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

Lembre-se que em BrazilianPortugueseTutorialFirstChange nós criamos uma 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 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 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, e a que acabamos de trazer com o 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

BrazilianPortugueseTutorialConflict (last edited 2010-05-02 23:06:50 by WagnerBruna)