Size: 91
Comment: stub
|
Size: 4837
Comment: converted to 1.6 markup
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
## page was renamed from WagnerBruna/BrazilianPortugueseTutorialConflict | |
Line 3: | Line 4: |
''(This page in English: [:TutorialConflict])'' | == Tutorial - merging conflicting changes == |
Line 5: | Line 6: |
''(This page in English: [[TutorialConflict]])'' Nós aprendemos como lidar com [[Merge|merges]] (recombinações) simples em ../BrazilianPortugueseTutorialMerge. O Mercurial também gerencia casos de merge mais complexos. 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 }}} 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 fazemos o [[Commit|commit]] da mudança: {{{ $ hg commit -m "Give thanks for dodging bullet" }}} 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 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 um [[Update|update]]. {{{ $ hg update abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes }}} (veja também [[Branch]]) Como em ../BrazilianPortugueseTutorialMerge, nós devemos executar {{{hg merge}}}. Como antes, o [[MergeProgram|utilitário de merge]] 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 em cada changeset (o que acabamos de criar com o [[Commit|commit]], e o que acabamos de trazer com o [[Pull|pull]]). {{{ $ hg merge }}} 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 merge, nós seremos capazes de ver quais conflitos existem entre os dois changesets, e decidir como resolvê-los. Abaixo estão os conflitos do exemplo exibidos no editor vim em um sistema Linux. {{{ /* * 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"); <<<<<<< /home/motoko/project/my-hello-not-cvs/hello.c.orig.197516148 printf("sure am glad I'm not using CVS!\n"); ||||||| /tmp/hello.c~base.aYR8Pf ======= printf("sure am glad I'm using Mercurial!\n"); >>>>>>> /tmp/hello.c~other.F7OpXy return 0; } }}} O Mercurial usa um merge de 3 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) (para mais informações a respeito do merge de 3 vias, veja [[http://revctrl.org/ThreeWayMerge|ThreeWayMerge]] no wiki [[http://revctrl.org/|Revctrl]] ). Caso não tenhamos instalado um programa gráfico de merge, 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 do merge, instalar um programa de merge, e tentar novamente. (~-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`-~). Como anteriormente, esteja certo de fazer o commit dessa alteração para o repositório, uma vez que a recombinação esteja concluída: {{{ $ hg commit -m "Merged changes from my-hello-new-output" }}} Este comando não deve gerar uma saída. Agora continuaremos e concluiremos em ../BrazilianPortugueseTutorialConclusion. ##See also: ImergeExtension |
|
Line 6: | Line 122: |
CategoryTutorial | CategoryBrazilianPortuguese |
Tutorial - merging conflicting changes
(This page in English: TutorialConflict)
Nós aprendemos como lidar com merges (recombinações) simples em ../BrazilianPortugueseTutorialMerge.
O Mercurial também gerencia casos de merge mais complexos. 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
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 fazemos o commit da mudança:
$ hg commit -m "Give thanks for dodging bullet"
Lembre-se que, em ../BrazilianPortugueseTutorialFirstChange, nós criamos um changeset em my-hello-new-output que também adicionou uma segunda linha de saída. O que acontece quando tentamos 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 um update.
$ hg update abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
(veja também Branch)
Como em ../BrazilianPortugueseTutorialMerge, nós devemos executar hg merge. Como antes, o utilitário de merge 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 em cada changeset (o que acabamos de criar com o commit, e o que acabamos de trazer com o pull).
$ hg merge
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 merge, nós seremos capazes de ver quais conflitos existem entre os dois changesets, e decidir como resolvê-los.
Abaixo estão os conflitos do exemplo exibidos no editor vim em um sistema Linux.
/* * 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"); <<<<<<< /home/motoko/project/my-hello-not-cvs/hello.c.orig.197516148 printf("sure am glad I'm not using CVS!\n"); ||||||| /tmp/hello.c~base.aYR8Pf ======= printf("sure am glad I'm using Mercurial!\n"); >>>>>>> /tmp/hello.c~other.F7OpXy return 0; }
O Mercurial usa um merge de 3 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)
(para mais informações a respeito do merge de 3 vias, veja ThreeWayMerge no wiki Revctrl ).
Caso não tenhamos instalado um programa gráfico de merge, 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 do merge, instalar um programa de merge, e tentar novamente.
(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).
Como anteriormente, esteja certo de fazer o commit dessa alteração para o repositório, uma vez que a recombinação esteja concluída:
$ hg commit -m "Merged changes from my-hello-new-output"
Este comando não deve gerar uma saída.
Agora continuaremos e concluiremos em ../BrazilianPortugueseTutorialConclusion.