Differences between revisions 7 and 8
Revision 7 as of 2009-05-19 19:31:03
Size: 6783
Editor: localhost
Comment: converted to 1.6 markup
Revision 8 as of 2010-05-02 15:36:08
Size: 8100
Editor: WagnerBruna
Comment: synchronized with English page and program translation
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from WagnerBruna/BrazilianPortugueseTutorialFirstChange
Line 8: Line 7:
Prosseguindo a partir de ../BrazilianPortugueseTutorialHistory, nós estamos dentro de nosso repositório {{{my-hello}}} , do qual fizemos um clone 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 um a um de partes individuais do trabalho. 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.
''(Esta página é a parte 4 de 9 da série [[BrazilianPortugueseTutorial]]. A parte anterior é [[BrazilianPortugueseTutorialHistory]], a próxima parte é [[BrazilianPortugueseTutorialShareChange]])''

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 em separado de partes individuais do trabalho. Vamos prosseguir 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:
Line 17: Line 18:
updating working directory
Line 20: Line 22:
'''Nota:''' Note que estamos dando um nome descritivo para nosso novo repositório, basicamente identificando o propósito do repositório. Já que no Mercurial a criação de um [[Clone|clone]] de um repositório é uma operação barata, nós rapidamente iremos acumular muitos repositórios ligeiramente diferentes. Se nós não dermos a eles nomes descritivos, rapidamente perderemos a capacidade de diferenciá-los. Note que demos um nome descritivo para nosso novo repositório, basicamente identificando o propósito do repositório. Já que no Mercurial a criação de um [[Clone|clone]] de um repositório é uma operação barata, nós rapidamente iremos acumular muitos repositórios ligeiramente diferentes. Se nós não dermos a eles nomes descritivos, rapidamente perderemos a capacidade de diferenciá-los (veja RepositoryNaming).
Line 29: Line 31:
O conteúdo de {{{hello.c}}} inicialmente é: O conteúdo de `hello.c` inicialmente é:
Line 50: Line 52:
Vamos editar a função {{{main}}} para que ela mostre uma linha extra de saída: Vamos editar a função `main` para que ela mostre uma linha extra de saída:
Line 63: Line 65:
Assim que terminamos, 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 verificar quais arquivos foram modificados nós usamos o comando {{{status}}} :
Assim que terminamos, fechamos nosso editor favorito, e está feito.
A
edição está agora pronta para criarmos uma [[ChangeSet|revisão]].

Mas e se interrompermos nosso trabalho, e esquecermos quais mudanças farão parte da revisão quando a criarmos?
Para verificar quais arquivos foram modificados nós usamos o comando `status}`:
Line 72: Line 76:
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}}}:
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 uma revisão.

Ao invés da forma longa `hg status` podemos alternativamente digitar apenas `hg st`: o Mercurial suporta abreviação de comandos,
bastando apenas que os caracteres digitados formem um prefixo distinto de um comando.

{{{
$ hg st
M hello.c
}}}

Nós também podemos examinar as mudanças em si que fizemos no arquivos usando o comando `diff`:
Line 80: Line 92:
+++ b/hello.c Fri Sep 30 10:27:47 2005 +0800 +++ b/hello.c Mon May 05 00:27:56 2008 +0200
Line 90: Line 102:
<!> 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. <!> 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 `--all` para restaurar todos os arquivos).
Apenas esteja certo de que é isso que você realmente quer fazer (veja [[Revert]]).
Line 96: Line 111:
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
`revert` renomeia o arquivo `hello.c` modificado para `hello.c.orig` e restaura `hello.c` para seu estado não modificado original.

`status` agora lista `hello.c.orig` como não rastreado (prefixo "?").

{{{
$ hg st
Line 103: Line 120:
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 de volta o {{{hello.c.orig}}} modificado para {{{hello.c}}}: 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 de volta o `hello.c.orig` para `hello.c`:
Line 107: Line 126:
$ hg status $ hg st
Line 111: Line 130:

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

{{{
$ hg commit
O ato de criar uma revisão é chamado [[Commit|consolidação]] (''committing'', em inglês).
Nós fazemos uma consolidação através do comando `commit`.
Esse comando possui um nome curto alternativo: `ci` (do inglês "check in"),
então podemos usar:

{{{
$ hg ci
Line 120: Line 141:
'''Nota:''' O editor de texto padrão é {{{vi}}} (no Unix e similares). Ele 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
''Nota:'' O editor de texto padrão em um Unix é o `vi`. Isso pode ser alterado usando as variáveis de ambiente {{{EDITOR}}} ou [[HGEDITOR]].

{{{

HG: Enter commit message. Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
Line 128: Line 152:
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:
A primeira linha é vazia, e as linhas que se seguem identificam o usuário, nome de ramo e os arquivos que irão incorporar esta revisão.

O nome de ramo padrão é "default" (veja NamedBranches).
O valor padrão para "user" é lido do arquivo de configuração `~/.hgrc`,
seção "ui", valor "username"
(veja [[http://www.selenic.com/mercurial/hgrc.5.html#ui|hgrc(5)]]). Alternativamente,
ele pode ser especificado na linha de comando com a opção -u (veja `hg help ci`
ou [[http://www.selenic.com/mercurial/hg.1.html#commit|hg.1.html#commit]]).

Para consolidar esta revisão, nós devemos descrever seu propósito (veja [[ChangeSetComments]]). Vamos digitar algo assim:
Line 134: Line 165:
HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: Enter commit message. Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
Line 138: Line 172:
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 fazer o commit de qualquer coisa em um projeto sério, você pode querer configurar um nome de usuário adequado 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
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 da consolidação.

Vejamos o que o comando `status` vai nos dizer agora:

{{{
$ hg st
}}}

Nada! Consolidamos nossa mudança para uma revisão, de modo que não há arquivos modificados.
Nossa [[Tip|tip]] agora combina com o conteúdo de nosso diretório de trabalho.

O comando [[Parent|parents]] nos mostra que o diretório de trabalho de nosso repositório está agora
em sincronia (veja [[Update]]) com a nova revisão consolidada.
(aqui temos apenas uma revisão pai, o que é sempre o caso após uma consolidação.
Nós veremos o caso de dois pais em BrazilianPortugueseTutorialMerge):

{{{
$ hg par
changeset: 2:86794f718fb1
Line 156: Line 195:
date: Fri Aug 26 01:26:28 2005 -0700 date: Mon May 05 01:20:46 2008 +0200
Line 158: Line 197:
}}}

Aí está! Nós consolidamos uma revisão.

Nós podemos agora podemos examinar o histórico de mudanças do nosso novo trabalho:
{{{
$ hg log
changeset: 2:86794f718fb1
tag: tip
user: mpm@selenic.com
date: Mon May 05 01:20:46 2008 +0200
summary: Express great joy at existence of Mercurial
Line 162: Line 213:
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.
'''Nota:''' Naturalmente o usuário, data e [[ChangeSetID|ID de revisão]] irão variar.

Como discutimos em [[BrazilianPortugueseTutorialClone]], a nova revisão existe apenas neste repositório. Esse é um aspecto muito importante do modo como o Mercurial opera.

Para ver como compartilhar mudanças, prossigamos para BrazilianPortugueseTutorialShareChange.

Tutorial - realizar nossa primeira alteração

(This page in English: TutorialFirstChange)

(Esta página é a parte 4 de 9 da série BrazilianPortugueseTutorial. A parte anterior é BrazilianPortugueseTutorialHistory, a próxima parte é BrazilianPortugueseTutorialShareChange)

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 repositório separado (veja também WorkingPractices). Isso evita que código não-relacionado se misture, e facilita o teste em separado de partes individuais do trabalho. Vamos prosseguir 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
updating working directory
2 files updated, 0 files merged, 0 files removed, 0 files unresolved

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

Agora é o momento de fazer uma mudança no novo repositório. Vamos entrar no 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 a função main para que ela 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, fechamos nosso editor favorito, e está feito. A edição está agora pronta para criarmos uma revisão.

Mas e se interrompermos nosso trabalho, e esquecermos quais mudanças farão parte da revisão quando a criarmos? Para verificar quais arquivos foram modificados nós 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 uma revisão.

Ao invés da forma longa hg status podemos alternativamente digitar apenas hg st: o Mercurial suporta abreviação de comandos, bastando apenas que os caracteres digitados formem um prefixo distinto de um comando.

$ hg st
M hello.c

Nós também podemos examinar as mudanças em si que fizemos no arquivos 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   Mon May 05 00:27:56 2008 +0200
@@ -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 --all para restaurar todos os arquivos). Apenas esteja certo de que é isso que você realmente quer fazer (veja Revert).

$ hg revert hello.c

revert renomeia o arquivo hello.c modificado para hello.c.orig e restaura hello.c para seu estado não modificado original.

status agora lista hello.c.orig como não rastreado (prefixo "?").

$ hg st
? 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 de volta o hello.c.orig para hello.c:

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

O ato de criar uma revisão é chamado consolidação (committing, em inglês). Nós fazemos uma consolidação através do comando commit. Esse comando possui um nome curto alternativo: ci (do inglês "check in"), então podemos usar:

$ hg ci

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

Nota: O editor de texto padrão em um Unix é o vi. Isso pode ser alterado usando as variáveis de ambiente EDITOR ou HGEDITOR.

HG: Enter commit message.  Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
HG: changed hello.c

A primeira linha é vazia, e as linhas que se seguem identificam o usuário, nome de ramo e os arquivos que irão incorporar esta revisão.

O nome de ramo padrão é "default" (veja NamedBranches). O valor padrão para "user" é lido do arquivo de configuração ~/.hgrc, seção "ui", valor "username" (veja hgrc(5)). Alternativamente, ele pode ser especificado na linha de comando com a opção -u (veja hg help ci ou hg.1.html#commit).

Para consolidar esta revisão, nós devemos descrever seu propósito (veja ChangeSetComments). Vamos digitar algo assim:

Express great joy at existence of Mercurial
HG: Enter commit message.  Lines beginning with 'HG:' are removed.
HG: --
HG: user: mpm@selenic.com
HG: branch 'default'
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 da consolidação.

Vejamos o que o comando status vai nos dizer agora:

$ hg st

Nada! Consolidamos nossa mudança para uma revisão, de modo que não há arquivos modificados. Nossa tip agora combina com o conteúdo de nosso diretório de trabalho.

O comando parents nos mostra que o diretório de trabalho de nosso repositório está agora em sincronia (veja Update) com a nova revisão consolidada. (aqui temos apenas uma revisão pai, o que é sempre o caso após uma consolidação. Nós veremos o caso de dois pais em BrazilianPortugueseTutorialMerge):

$ hg par
changeset:   2:86794f718fb1
tag:         tip
user:        mpm@selenic.com
date:        Mon May 05 01:20:46 2008 +0200
summary:     Express great joy at existence of Mercurial

Aí está! Nós consolidamos uma revisão.

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

$ hg log
changeset:   2:86794f718fb1
tag:         tip
user:        mpm@selenic.com
date:        Mon May 05 01:20:46 2008 +0200
summary:     Express great joy at existence of Mercurial

(...)

Nota: Naturalmente o usuário, data e ID de revisão irão variar.

Como discutimos em BrazilianPortugueseTutorialClone, a nova revisão existe apenas neste repositório. Esse é um aspecto muito importante do modo como o Mercurial opera.

Para ver como compartilhar mudanças, prossigamos para BrazilianPortugueseTutorialShareChange.


CategoryBrazilianPortuguese

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