Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
50
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Экскурсия по Mercurial: основы

2.4.3. Подробности

В то время как информация, которую выводит hg log полезна, если вы знаете что ищете, вам может понадобиться полное описание изменений или список измененных файлов, если вы хотите узнать та ли это ревизия, что вам нужна. Команда hg log с аргументом -v (--verbose) предоставит вам такую возможность.

$ hg log -v -r 3

changeset:

3:0272e0d5a517

user:

Bryan O'Sullivan <bos@serpentine.com>

date:

Sat Aug 16 22:08:02 2008 +0200

files:

Makefile

description:

Get make to generate the final binary from a .o file.

Если вы хотите видеть описание и то как изменялось содержимое, добавьте опцию -p (или --patch). Будет показываться содержание изменений в едином diff (если вы никогда не видели формат унифицированного diff раньше, см. Раздел 12.4, «Понимание патчей»).

$ hg log -v -p -r 2

changeset:

2:fef857204a0c

user:

Bryan O'Sullivan <bos@serpentine.com>

date:

Sat Aug 16 22:05:04 2008 +0200

files:

hello.c

description:

 

Introduce a typo into hello.c.

diff -r 82e55d328c8c -r fef857204a0c hello.c

--- a/hello.c Fri Aug 26 01:21:28 2005 -0700

+++ b/hello.c Sat Aug 16 22:05:04 2008 +0200 @@ -11,6 +11,6 @@

int main(int argc, char **argv)

{

- printf("hello, world!\n");

+printf("hello, world!\"); return 0;

}

Опция -p очень полезна, поэтому следует её запомнить.

2.5. Об опциях команд

Давайте сделаем перерыв в изучении команд Mercurial и обсудим шаблоны работы с ними. Это будет вам полезно, когда мы продолжим наше турне.

Mercurial имеет простой и последовательный подход в работе с опциями, которые вы можете передавать командам. Это следует из соглашений по опциям, которые являются общими для современных Linux и Unix систем.

Каждая опция имеет длинное имя. К примеру, как мы уже видели, команда hg log принимает параметр --rev.

Также большинство опций имеют короткие имена. Вместо --rev можно использовать -r. Не все опции имеют короткие имена, потому как некоторые из них просто редко используются.

Длинные опции начинаются с двух тире (--rev), а короткие начинаются с одного (-r).

Имена опций и их применение в командах согласовано. Например, все команды, позволяющие указывать ID или номер ревизии принимают оба аргумента -r и --rev.

При использовании коротких опций, вы можете печатать их вместе. Например, команда hg log -v -p -r 2 может быть записана в виде hg log -vpr2.

15

Экскурсия по Mercurial: основы

В примерах в этой книге я использую короткую запись аргументов, а не длинную. Это всего лишь дело моего вкуса, так что не ищите в этом скрытого смысла.

Большинство выводящих какую-то информацию команд выдадут большее количество информации, если им передать опцию -v (или --verbose), или меньшее, если передать опцию -q (или --quiet).

Вариант наименования опций

Почти всегда в командах Mercurial названия опций придерживаются единой концепции. Для примера, если команда работает с наборами изменений, вы всегда будете идентифицировать их опциями -- rev или -r. Такая последовательность в использовании имён делает более лёгким запоминание опций различных команд.

2.6. Создание и анализ изменений

Так как мы уже умеем просматривать историю в Mercurial, можно заняться внесением изменений и их изучением.

Первое, что необходимо сделать — изолировать наш эксперимент в его собственном репозитории. Для этого используется команда hg clone, но так как у нас уже есть копия репозитория локально, то мы можем клонировать её вместо клонирования по сети. Это действие значительно быстрее, а кроме того, в большинстве случаев использует меньше места на диске1.

$ cd ..

$ hg clone hello my-hello updating to branch default

2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd my-hello

Кстати говоря, хорошей идеей является хранение «нетронутой» копии удалённого репозитория, который можно использовать для создания временных клонов для получения «песочниц» для каждой задачи, над которой вам хочется поработать. Это позволяет вам работать над множеством задач одновременно, изолированных друг от друга до завершения и вашей готовности их интегрировать. Потому как локальные клоны настолько «дёшевы», что их создание и уничтожение в любое удобное время практически не несёт накладных расходов.

В нашем хранилище my-hello, мы имеем файл hello.c — классическую программу «Hello, World».

$ cat 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!\"); return 0;

}

Давайте отредактируем этот файл чтоб он печатал на выходе вторую строку.

# ... edit edit edit ...

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

1Экономия пространства возникает, когда источник и получатель репозитория находятся на одной файловой системе, в этом случае Mercurial будет использовать жесткие ссылки, чтобы использовать политику совместного использования копрование-при-записи для его внутренних метаданных. Если это объяснение ничего для вас не значит, не беспокойтесь: все происходит прозрачно и автоматически, и вам не нужно ничего понимать.

16

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]