Differences between revisions 2 and 3
Revision 2 as of 2008-02-11 22:01:58
Size: 10640
Editor: WagnerBruna
Comment:
Revision 3 as of 2008-02-11 22:04:57
Size: 10716
Editor: WagnerBruna
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:

''(This page in English: [:TutorialFirstChange])''
Line 191: Line 193:
Como discutimos em TutorialClone, o novo changeset existe apenas neste repositório. Essa é uma parte crítica do modo como o Mercurial opera. Como discutimos em ../BrazilianPortugueseTutorialClone, o novo changeset existe apenas neste repositório. Essa é uma parte crítica do modo como o Mercurial opera.

Tutorial - realizar nossa primeira alteração

(This page in English: [:TutorialFirstChange])

Prosseguindo a partir de ../BrazilianPortugueseTutorialHistory, nós estamos dentro de nosso repositório my-hello , que clonamos em ../BrazilianPortugueseTutorialClone.

É uma boa prática no desenvolvimento com o Mercurial isolar cada mudança em um [:Repository:repositório] separado (veja também ["WorkingPractices"]). Isso evita que código não-relacionado se misture, e facilita o teste de blocos individuais de trabalho um a um. Vamos começar de acordo com esse modelo.

Nosso tolo objetivo é fazer com que o programa "hello, world" imprima outra linha de saída. Em primeiro lugar, nós criamos um novo repositório chamado my-hello-new-output, um clone de my-hello, para nosso pequeno projeto.

$ cd ..
$ hg clone my-hello my-hello-new-output
2 files updated, 0 files merged, 0 files removed, 0 files unresolved

Nota: Note que estamos dando um nome descritivo para nosso novo repositório, basicamente identificando o propósito do repositório. Já que a criação de um [:Clone:clone] de um repositório no Mercurial é uma operação barata, nós rapidamente iremos acumular muitos repositórios ligeiramente diferentes. Se nós não dermos a eles nomes descritivos, nós rapidamente perderemos a capacidade de diferenciá-los.

Agora é o momento de fazer uma mudança no novo repositório. Vamos entrar no [:WorkingDirectory:diretório de trabalho], que é simplesmente o nome que damos para o diretório onde estão todos os arquivos, e modificar o código fonte com nosso editor favorito:

$ cd my-hello-new-output
$ vi hello.c

O conteúdo de hello.c inicialmente é:

/*
 * 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");
        return 0;
}

Vamos editar main para que ele mostre uma linha extra de saída:

(...)

int main(int argc, char **argv)
{
        printf("hello, world!\n");
        printf("sure am glad I'm using Mercurial!\n");
        return 0;
}

Assim que terminamos, nós fechamos nosso editor favorito, e pronto: a edição está agora pronta para criarmos um [:ChangeSet:changeset].

Mas e se interrompermos nosso trabalho, e esquecermos quais mudanças farão parte do changeset quando o criarmos? Para isso, usamos o comando status .

$ hg status
M hello.c

A saída é compacta, mas o prefixo M está meramente nos dizendo que hello.c foi modificado, então nossa mudança está pronta para ser incluída em um changeset.

Nós também podemos examinar as mudanças em si que fizemos no arquivo usando o comando diff:

$ hg diff
diff -r 82e55d328c8c hello.c
--- a/hello.c   Fri Aug 26 01:21:28 2005 -0700
+++ b/hello.c   Fri Sep 30 10:27:47 2005 +0800
@@ -12,5 +12,6 @@
 int main(int argc, char **argv)
 {
        printf("hello, world!\n");
+       printf("sure am glad I'm using Mercurial!\n");
        return 0;
 }

<!> No caso de querermos descartar nossas mudanças e começar novamente, podemos usar o comando revert para restaurar hello.c para seu estado sem modificações (ou usar a opção -a para restaurar todos os arquivos). Apenas tenha a certeza de que é isso que você realmente quer fazer.

$ hg revert hello.c

Por padrão o comando revert também grava uma cópia de segurança dos arquivos modificados com a extensão .orig.

$ hg status
? hello.c.orig

Se mudarmos de idéia novamente e quisermos reaproveitar a modificação que fizemos, basta removermos o arquivo hello.c sem modificações e renomearmos o hello.c.orig modificado para hello.c.

$ rm hello.c
$ mv hello.c.orig hello.c
$ hg status
M hello.c

O ato de criar um changeset é chamado [:Commit:committing] (armazenamento). Nós fazemos um commit através do comando commit .

$ hg commit

Isto irá abrir o editor de texto padrão, e apresentar algumas linhas de texto.

Nota: O editor de texto padrão é vi (no Unix e similares). Isso pode ser mudado usando as variáveis de ambiente EDITOR ou ["HGEDITOR"] . Além disso, o hash do [:Manifest:manifest] pode ser diferente, dependendo de como você digitou e salvou o arquivo.

(empty line)
HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944
HG: changed hello.c

A primeira linha é vazia, e as linhas que se seguem identificam os arquvos que irão incorporar este changeset.

Para fazer o commit deste changeset, nós devemos descrever seu propósito (veja ["ChangeSetComments"]). Vamos digitar algo assim:

Express great joy at existence of Mercurial
HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944
HG: changed hello.c

Em seguida, nós salvamos o texto e fechamos o editor, e se tudo correr bem, o comando commit irá terminar sem imprimir nada. <!> Se você fechar o editor sem salvar o texto, commit irá abortar a operação, de modo que você pode mudar de idéia antes do commit.

Nota: Antes de faezr o commit de qualquer coisa em um projeto sério, você pode querer configurar um nome de usuário com significado em ~/.hgrc; veja ["QuickStart2"].

Vejamos o que o comando status vai nos dizer agora?

$ hg status

Nada! Fizemos o commit de nossa mudança para um changeset, de modo que não há arquivos modificados. Nossa [:Tip:tip] agora combina com o conteúdo de nosso diretório de trabalho.

Nós agora podemos examinar o histórico de mudanças para o nosso novo trabalho:

$ hg log
changeset:   2:a58809af174d
tag:         tip
user:        mpm@selenic.com
date:        Fri Aug 26 01:26:28 2005 -0700
summary:     Express great joy at existence of Mercurial

(...)

Aí está! Nós fizemos o commit de um changeset.

Nota: Naturalmente o usuário, data e [:ChangeSetID:changeset ID] irão variar.

Como discutimos em ../BrazilianPortugueseTutorialClone, o novo changeset existe apenas neste repositório. Essa é uma parte crítica do modo como o Mercurial opera.

Para compartilhar mudanças, nós devemos prosseguir para ../BrazilianPortugueseTutorialShareChange.


CategoryTutorial

BrazilianPortugueseTutorialFirstChange (last edited 2010-05-02 15:36:08 by WagnerBruna)