Differences between revisions 2 and 7 (spanning 5 versions)
Revision 2 as of 2008-02-12 17:46:31
Size: 7764
Editor: WagnerBruna
Comment:
Revision 7 as of 2009-05-19 19:30:57
Size: 4878
Editor: localhost
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/BrazilianPortugueseTutorialMerge
Line 5: Line 6:
''(This page in English: [:TutorialMerge])'' ''(This page in English: [[TutorialMerge]])''
Line 7: Line 8:
##In TutorialExport, we learned how to share a change with another person. But since (as of version 0.7) [:Import:import] isn't functional enough to handle emailed merges correctly, we're going to demonstrate merging by pulling from another [:Repository:repository] that has made an incompatible change.
Em ../BrazilianPortugueseTutorialExport, nós aprendemos como compartilhar uma mudança com outra pessoa. Agora iremos demonstrar como [:Merge:recombinar] mudanças a partir de um [:Pull:pull] de outro [:Repository:repositório] que realizou uma mudança incompatível.
Em ../BrazilianPortugueseTutorialExport, nós aprendemos como compartilhar uma mudança com outra pessoa. Agora iremos demonstrar como fazer o [[Merge|merge]] (recombinação) dessas mudanças a partir de um [[Pull|pull]] de outro [[Repository|repositório]] que realizou uma mudança incompatível.
Line 10: Line 10:
##First, we must create something to [:Merge:merge]. Let's [:Clone:clone] the {{{my-hello}}} repository again:
Primeiramente, nós devemos criar algo para [:Merge:recombinar]. Vamos [:Clone:clonar] o repositório {{my-hello}}} novamente:
Primeiramente, nós devemos criar algo para fazer o [[Merge|merge]]. Vamos novamente criar um [[Clone|clone]] do repositório {{my-hello}}} :
Line 18: Line 17:
##We are going to give {{{hello.c}}} a description in its comment section.
Line 26: Line 24:
##Let's change the second line from this:
Line 33: Line 30:
##to this:
Line 40: Line 36:
##Let's save and quit the editor, and [:Commit:commit] our change. This time, we save some time by using the {{{-m}}} option to the {{{commit}}} command, to spare us from being dropped into an editor:
Salvemos, fechemos o editor, e façamos o [:Commit:commit
] de nossa alteração. Desta vez, nós economizamos um pouco de tempo através da opção {{{-m}}} para o comando {{{commit}}} , para evitar que o editor de texto seja chamado:
Salvemos, fechemos o editor, e façamos o [[Commit|commit]] de nossa alteração. Desta vez, nós economizamos um pouco de tempo através da opção {{{-m}}} para o comando {{{commit}}} , com a qual fornecemos um comentário diretamente (e evitamos que o editor de texto seja chamado):
Line 47: Line 42:
##At this point, we have made one change to {{{hello.c}}} in the {{{my-hello-new-output}}} repository, and another change to {{{hello.c}}} in the {{{my-hello-desc}}} repository (see [:Branch]). How do we ''merge'' these two diverging lines of development? Will there be a problem when we want to [:Pull:pull] from one into the other?
Neste ponto, nós fizemos uma mudança em {{{hello.c}}} no repositório {{{my-hello-new-output}}} , e outra mudança em {{{hello.c}}} no repositório {{{my-hello-desc}}} (veja [:Branch]). Como nós ''recombinamos'' essas duas linhas divergentes de desenvolvimento? Haverá algum problema quando tentarmos fazer um [:Pull:pull] de um para o outro?
Neste ponto, nós fizemos uma mudança em {{{hello.c}}} no repositório {{{my-hello-new-output}}} , e outra mudança em {{{hello.c}}} no repositório {{{my-hello-desc}}} (veja [[Branch]]). Como nós ''recombinamos'' essas duas linhas divergentes de desenvolvimento? Haverá algum problema quando tentarmos fazer um [[Pull|pull]] de um para o outro?
Line 50: Line 44:
##This works just fine. While still in {{{my-hello-desc}}}, let's pull the changes from {{{my-hello-new-output}}} and see what happens:
Line 64: Line 57:
##This looks just like the output of {{{pull}}} from TutorialShareChange! So all we have to do is an [:Update:update] now, right?
Isto se parece exatamente com a saída de {{{pull}}} em ../BrazilianPortugueseTutorialShareChange! Então tudo o que temos de fazer agora é um [:Update:update], certo?
Isto se parece exatamente com a saída de {{{pull}}} em ../BrazilianPortugueseTutorialShareChange! Então tudo o que temos de fazer agora é um [[Update|update]], certo?
Line 72: Line 64:
##Nope. Something has happened. Mercurial is telling us that we must merge the changes that we made in each repository. This sounds painful, right? It's actually very easy. Let's follow the instructions of the last line of output:
Não. Algo aconteceu. O Mercurial está nos dizendo que devemos recombinar as mudanças que fizemos em cada repositório. Isso soa doloroso, certo? Mas na verdade é bem fácil. Vamos seguir as instruções da última linha da saída:
Não. Algo aconteceu. O Mercurial está nos dizendo que devemos recombinar as mudanças que fizemos em cada repositório. Isso soa complicado, certo? Mas na verdade é bem fácil. Vamos seguir as instruções da última linha da saída:
Line 82: Line 73:
##(~-''Note for Windows users:'' Mercurial is missing a merge program, if you get an error like ''`hgmerge is not recognized as an internal or external command.`'' See MergeProgram for information on how to fix this.-~)
Line 85: Line 75:
##That's all there is to it! Mercurial was able to handle the merge automatically for you, by calling under the covers the {{{hgmerge}}} script (or whatever is your merge program. Depending on your environment, the `hgmerge` may call a graphical merge resolver tool. If we look at {{{hello.c}}}, we find that it contains ''both'' the change from {{{my-hello-new-output}}} and the change from {{{my-hello-desc}}}.
E é apenas isso! O Mercurial foi capaz de gerenciar o merge automaticamente para você, chamando implicitamente o script {{{hgmerge}}} (ou qualquer que seja seu programa de merge. Dependendo do seu ambiente, o `hgmerge` pode chamar um programa gráfico de resolução de recombinações. Se olharmos {{{hello.c}}}, veremos que contém ''ambas'' as mudanças de {{{my-hello-new-output}}} e de {{{my-hello-desc}}}.
E é apenas isso! O Mercurial foi capaz de gerenciar o merge automaticamente para você, chamando implicitamente o script {{{hgmerge}}} (ou qualquer que seja seu programa de merge; dependendo do seu ambiente, o `hgmerge` pode chamar um programa gráfico de resolução de merges). Se olharmos {{{hello.c}}}, veremos que contém ''ambas'' as mudanças de {{{my-hello-new-output}}} e de {{{my-hello-desc}}}.
Line 88: Line 77:
##(~-Note: before Mercurial version 0.9, `hg update -m` should have been used in place of `hg merge`-~).
Line 91: Line 79:
##When working with changes made by other people, this is the kind of merge you will end up performing most of the time. Don't forget to commit this change to the repository, as suggested on the last line of the output from {{{hg merge}}}:
Line 100: Line 87:
##To show the changes of our merging, we use the {{{annotate}}} command to show [:ChangeSet:changeset] information per file line.
Para mostrar as mudanças de nossa recombinação, nós usamos o comando {{{annotate}}} para mostrar informações de [:ChangeSet:changeset] para cada linha do arquivo.

##Note that revision 2 is our modification to {{{my-hello-desc}}} repository and revision 3 is the changes pulled and merged from {{{my-hello-new-output}}} repository to {{{my-hello-desc}}} repository.
Note que a revisão 2 foi nossa modificação em {{{my-hello-desc}}} e a revisão 3 foi a mudança trazida de {{{my-hello-new-output}}} e recombinada no repositório {{{my-hello-desc}}} .
Para mostrar as mudanças de nossa recombinação, nós usamos o comando {{{annotate}}} , que exibe informações de [[ChangeSet|changeset]] para cada linha do arquivo. Note que a revisão 2 foi nossa modificação em {{{my-hello-desc}}} e a revisão 3 foi a mudança trazida de {{{my-hello-new-output}}} e recombinada no repositório {{{my-hello-desc}}} :
Line 127: Line 110:
##Let us continue on, however, and learn how to deal with situations where [:Conflict:conflicting] changes have been made in TutorialConflict.
Vamos agora ver como lidar com situações onde foram feitas mudanças [:Conflict:conflitantes] em ../BrazilianPortugueseTutorialConflict.
Vamos agora ver como lidar com situações onde foram feitas mudanças [[Conflict|conflitantes]] em ../BrazilianPortugueseTutorialConflict.
Line 130: Line 112:
CategoryTutorial CategoryBrazilianPortuguese

Tutorial - Merging changes

(This page in English: TutorialMerge)

Em ../BrazilianPortugueseTutorialExport, nós aprendemos como compartilhar uma mudança com outra pessoa. Agora iremos demonstrar como fazer o merge (recombinação) dessas mudanças a partir de um pull de outro repositório que realizou uma mudança incompatível.

Primeiramente, nós devemos criar algo para fazer o merge. Vamos novamente criar um clone do repositório my-hello} :

$ cd ..
$ hg clone my-hello my-hello-desc

Nós colocaremos em hello.c uma descrição em sua seção de comentários.

$ cd my-hello-desc
$ vi hello.c

Vamos trocar a segunda linha, que é:

 * hello.c

por esta linha:

 * hello.c - hello, world

Salvemos, fechemos o editor, e façamos o commit de nossa alteração. Desta vez, nós economizamos um pouco de tempo através da opção -m para o comando commit , com a qual fornecemos um comentário diretamente (e evitamos que o editor de texto seja chamado):

$ hg commit -m "Add description of hello.c"

Neste ponto, nós fizemos uma mudança em hello.c no repositório my-hello-new-output , e outra mudança em hello.c no repositório my-hello-desc (veja Branch). Como nós recombinamos essas duas linhas divergentes de desenvolvimento? Haverá algum problema quando tentarmos fazer um pull de um para o outro?

Isso funcionará sem problemas. Enquanto ainda estamos em my-hello-desc, vamos fazer um pull das mudanças de my-hello-new-output e ver o que acontece:

$ 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)

Isto se parece exatamente com a saída de pull em ../BrazilianPortugueseTutorialShareChange! Então tudo o que temos de fazer agora é um update, certo?

$ hg update
abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes

Não. Algo aconteceu. O Mercurial está nos dizendo que devemos recombinar as mudanças que fizemos em cada repositório. Isso soa complicado, certo? Mas na verdade é bem fácil. Vamos seguir as instruções da última linha da saída:

$ hg merge
merging hello.c
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

(Nota para usuários do Windows: se você receber um erro como hgmerge is not recognized as an internal or external command., o Mercurial não consegue encontrar um programa de merge. Veja MergeProgram para informações sobre como consertar isso.)

E é apenas isso! O Mercurial foi capaz de gerenciar o merge automaticamente para você, chamando implicitamente o script hgmerge (ou qualquer que seja seu programa de merge; dependendo do seu ambiente, o hgmerge pode chamar um programa gráfico de resolução de merges). Se olharmos hello.c, veremos que contém ambas as mudanças de my-hello-new-output e de my-hello-desc.

(Nota: em versões anteriores ao Mercurial 0.9, hg update -m seria usado ao invés de hg merge).

Ao trabalhar com mudanças feitas por outras pessoas, esse é o tipo de recombinação que você fará na maior parte das vezes. Não esqueça de fazer o commit desta mudança para o repositório, como sugerido na última linha da saída de hg merge:

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

Esse comando não deve mostrar nenhuma saída.

Para mostrar as mudanças de nossa recombinação, nós usamos o comando annotate , que exibe informações de changeset para cada linha do arquivo. Note que a revisão 2 foi nossa modificação em my-hello-desc e a revisão 3 foi a mudança trazida de my-hello-new-output e recombinada no repositório my-hello-desc :

$ hg annotate hello.c
0: /*
2:  * hello.c - hello, world
0:  *
0:  * Placed in the public domain by Bryan O'Sullivan
0:  *
0:  * This program is not covered by patents in the United States or other
0:  * countries.
0:  */
0:
0: #include <stdio.h>
0:
0: int main(int argc, char **argv)
0: {
0:      printf("hello, world!\n");
3:      printf("sure am glad I'm using Mercurial!\n");
0:      return 0;
0: }

Vamos agora ver como lidar com situações onde foram feitas mudanças conflitantes em ../BrazilianPortugueseTutorialConflict.


CategoryBrazilianPortuguese

BrazilianPortugueseTutorialMerge (last edited 2010-05-02 22:41:03 by WagnerBruna)