Differences between revisions 5 and 6
Revision 5 as of 2008-02-12 20:14:10
Size: 4855
Editor: WagnerBruna
Comment: moving to the right place
Revision 6 as of 2008-02-12 20:43:04
Size: 4866
Editor: WagnerBruna
Comment: fixed category
Deletions are marked like this. Additions are marked like this.
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:merge] (recombinação) dessas mudanças a partir de um [:Pull:pull] de outro [:Repository:repositório] que realizou uma mudança incompatível.

Primeiramente, nós devemos criar algo para fazer o [:Merge:merge]. Vamos novamente criar um [:Clone: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: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: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: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: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 [:Conflict:conflitantes] em ../BrazilianPortugueseTutorialConflict.


CategoryBrazilianPortuguese

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