Differences between revisions 3 and 7 (spanning 4 versions)
Revision 3 as of 2008-02-12 19:59:21
Size: 5090
Editor: WagnerBruna
Comment: cleaning up; reviewing phrasing
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 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.
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:
Primeiramente, nós devemos criar algo para fazer o [:Merge:merge]. Vamos novamente criar um [:Clone:clone] do repositório {{my-hello}}} : Primeiramente, nós devemos criar algo para fazer o [[Merge|merge]]. Vamos novamente criar um [[Clone|clone]] do repositório {{my-hello}}} :
Line 36: Line 36:
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): 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 42: Line 42:
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 57: Line 57:
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 87: Line 87:
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}}} : 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 110: Line 110:
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 112: 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)