Size: 8929
Comment:
|
← Revision 10 as of 2012-08-13 20:19:28 ⇥
Size: 10250
Comment: исправил свою ошибку в форматировании
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
''(Это страница 4 из 9 серии [[Tutorial|учебников]]. Предыдущая часть - RussianTutorialHistory, следующая часть -RussianTutorialShareChange)'' | |
Line 3: | Line 4: |
''(Это страница 4 из 9 серии [:Tutorial:учебников]. Предыдущая часть - [:RussianTutorialHistory], следующая часть [:RussianTutorialShareChange])'' | Начав с RussianTutorialHistory, теперь мы внутри репозитория `my-hello`, клонированного на странице RussianTutorialClone. |
Line 5: | Line 6: |
Начав с RussianTutorialHistory, теперь мы внутри репозитория `my-hello`, склонированного в RussianTutorialClone. | При работе с Mercurial рекомендуется изолировать связанные изменения в раздельном [[Repository|репозитории]] (смотри [[WorkingPractices|Лучшие практики]]). Это предотвращает смешивание независимого кода и упрощает тестирование персональных частей работы отдельно друг от друга. Давайте начнём, следуя этой рекомендации. |
Line 7: | Line 8: |
При работе с Mercurial рекомендуется изолировать связанные изменения в раздельном [:Repository:репозитории] (смотри [:WorkingPractices:Лучшие практики]). Это предотвращает смешивание независимого кода и упрощает тестирование персональных частей работы отдельно друг от друга. Давайте начнём следуя этой рекомендации. Наша цель проста - заставить программу "hello, world" ("Привет, мир") выводить другую строчку. Для начала мы создаем новый репозитарий `my-hello-new-output` [:Clone:клонированием] `my-hello` для нашего небольшого проекта (используем Mercurial 1.0): |
Наша цель проста - заставить программу "hello, world" ("Привет, мир") выводить другую строчку. Для начала мы создаем новый репозитарий `my-hello-new-output` [[Clone|клонированием]] `my-hello` для нашего небольшого проекта (используем Mercurial 1.0): |
Line 16: | Line 15: |
Заметьте, что мы дали нашему новому репозитарию имя, описывающее его назначение. Сделать клон репозитария в Mercurial - это "дешевая" операция. Мы быстро накопим много слегка отличающихся репозитариев. Если мы не будем давать репозитариям описательных имён, то вскоре потеряем возможность отличить один от другого (see RepositoryNaming). | |
Line 17: | Line 17: |
Заметьте что мы дали нашему новому репозитарию имя описывающее его назначение. Сделать клон репозитария в Mercurial это "дешевая" операция. Мы быстро накопим много слегка оличающихся репозитариев. Если мы не будем давать репозитариям описательных имён, то вскоре потеряем возможность оличить один от друго (see RepositoryNaming). Пора внести изменения в новый репозиторий. Перейдём в [:WorkingDirectory:рабочий каталог] репозитория и отредактируем исходник нашим любимым редактором: |
Пора внести изменения в новый репозиторий. Перейдём в [[WorkingDirectory|рабочий каталог]] репозитория и отредактируем исходник нашим любимым редактором: |
Line 25: | Line 23: |
Line 46: | Line 43: |
Line 59: | Line 55: |
Сделав это, выходим из редактора. Всё готово - можно создавать [[ChangeSet|changeset]]. | |
Line 60: | Line 57: |
Сделав это, выходим из редактора. Вот и готово. Можно содавать [:ChangeSet:changeset]. Но что если мы отвлеклись и забыли какие изменения мы собирались внести в changeset? В таком случае мы воспользуемся командой `status`. |
Но что, если мы отвлеклись и забыли, какие изменения мы собирались внести в changeset? В таком случае мы воспользуемся командой `status`. |
Line 68: | Line 63: |
Вывод краток, но префикс `M` говорит нам, что файл `hello.c` был модифицирован, и наши исправления готовы войти в changeset. | |
Line 69: | Line 65: |
Вывод краток, но префикс `M` говорит нам что `hello.c` был модифицирован, и наши исправления готовы войти в changeset. Вместо скучного `hg status` мы можем вводить `hg st`. Mercurial позволяет сокращать команды пока введённые символы не двусмысленны. |
Вместо скучного `hg status` мы можем вводить забавный `hg st` - Mercurial позволяет сокращать команды, пока введённые символы однозначно определяют команду. |
Line 79: | Line 71: |
Мы также можем просмотреть реальные изменения в файлах используя команду `diff`: |
Мы также можем просмотреть реальные изменения в файлах, используя команду `diff`: |
Line 95: | Line 86: |
<!> Если мы хотим отменить наши изменения и начать заново, мы можем использовать команду `revert` для восстановления `hello.c` в немодифицированное состояние (или использовать опцию `--all` что бы откатить все файлы). Только убедитесь что знаете чего хотите (см. [:Revert]). |
<!> Если мы хотим отменить наши изменения и начать заново, мы можем использовать команду `revert` для восстановления `hello.c` в немодифицированное состояние (или использовать опцию `--all` чтобы откатить все файлы). Только убедитесь, что точно знаете, что при этом произойдёт (см. [[Revert]]). |
Line 102: | Line 91: |
Line 111: | Line 99: |
Если мы снова передумали и хотим использовать наши отменённые изменения, мы просто удаляем немодифицированный `hello.c` и переименовываем модифицированный `hello.c.orig` в `hello.c` |
Если мы снова передумали и хотим использовать наши отменённые изменения, просто удаляем немодифицированный `hello.c` и переименовываем модифицированный `hello.c.orig` в `hello.c` |
Line 121: | Line 107: |
The act of creating a changeset is called [:Commit:committing] it. We perform a commit using the `commit` command. The `commit` command has a nice short alias: `ci` ("check in"), so we can use that: |
Процесс создания changeset'а называется [[Commit]] и выполняется командой `commit`. У команды `commit` есть замечательное сокращение: `ci` ("check in"), так что мы можем пользоваться ею так: |
Line 130: | Line 112: |
При этом запустится редактор, отображая несколько загадочных строк текста. | |
Line 131: | Line 114: |
This drops us into an editor, and presents us with a few cryptic lines of text. ''Note:'' The default editor is `vi`. This can be changed using the `EDITOR` or [:HGEDITOR] environment variables. |
''Note:'' Редактор по умолчанию можно изменить, задав значение переменной окружения `EDITOR` или [[HGEDITOR]]. |
Line 136: | Line 117: |
Line 143: | Line 123: |
Первая строка пуста, а дальше следуют строки, идентифицирующие пользователя, имя ветки (branch) и файлы, входящие в changeset. | |
Line 144: | Line 125: |
The first line is empty and the lines that follow identify the user, branch name and the files that will go into this changeset. | Ветка по умолчанию называется "default" (см. NamedBranches). Значение для "user" извлекается из конфигурационного файла {{{~/.hgrc}}} - ключ "username" раздела "ui" (см. [[http://www.selenic.com/mercurial/hgrc.5.html#ui|hgrc(5)]]). При необходимости имя пользователя можно указать в командной строке опцией `-u` (см. {{{hg help ci}}} или [[http://www.selenic.com/mercurial/hg.1.html#commit|hg.1.html#commit]]). |
Line 146: | Line 127: |
The default branch name is "default" (see NamedBranches). The default value for "user" is taken from the {{{~/.hgrc}}} configuration file from value "username" of section "ui" (see [http://www.selenic.com/mercurial/hgrc.5.html#ui hgrc(5)]). Alternatively, it can also be specified on the command line with option -u (see `hg help ci` or [http://www.selenic.com/mercurial/hg.1.html#commit hg.1.html#commit]). To commit the changeset, we must describe the reason for it (see [:ChangeSetComments]). Let's type something like this: |
Что бы зафиксировать(:Commit) changeset, мы должны его описать (см. ChangeSetComments). Введём что-нибудь такое: |
Line 158: | Line 137: |
Далее сохраняем текст, выходим из редактора и, если всё хорошо, команда `commit` завершится и ничего не напечатает. | |
Line 159: | Line 139: |
Next, we save the text and quit the editor, and, if all goes well, the `commit` command will exit and prints no output. | <!> Если вы выйдете из редактора, не сохранив или не введя текст, `commit` прервётся, так что в этот момент Вы ещё можете передумать. |
Line 161: | Line 141: |
<!> If you quit the editor without saving the text or enter no text, `commit` will abort the operation, so you may change your mind before committing. Let's see what the {{{status}}} command will tell us now? |
Что же нам сейчас ответит команда {{{status}}}? |
Line 168: | Line 146: |
Ничего! Наши изменения были зафиксированы в changeset'е, поэтому нет измененных файлов, нуждающихся в фиксации. Наш [[Tip|tip]] совпадает с содержимым рабочего каталога. | |
Line 169: | Line 148: |
Nothing! Our change has been committed to a changeset, so there's no modified file in need of a commit. Our [:Tip:tip] now matches our working directory contents. The [:Parent:parents] command shows us that our repository's working directory is now synced (see [:Update]) to the newly committed changeset (here we have only one parent revision, which is always the case after a commit. We will see two parents in TutorialMerge): |
Команда [[Parent|parents]] показывает, что наш рабочий каталог репозитория синхронизирован (see [[Update]]) с последним зафиксированным changeset'ом. Сейчас имеется только один родитель, что всегда происходит после выполнения команды {{{commit}}}. Мы увидим двух родителей в разделе TutorialMerge. |
Line 183: | Line 158: |
Мы зафиксировали новый changeset. | |
Line 184: | Line 160: |
There it is! We've committed a new changeset. | Мы можем просмотреть изменения истории нашей работы: |
Line 186: | Line 162: |
We can now examine the change history for our new work: | |
Line 197: | Line 172: |
''Примечание:'' Поля user, date, и [[ChangeSetID|changeset]] у Вас, естественно, будут другими. | |
Line 198: | Line 174: |
''Note:'' The user, date, and [:ChangeSetID:changeset ID] will of course vary. | Как мы говорили в RussianTutorialClone, новый changeset присутствует только в этом репозитории. Это важный момент для понимания работы Mercurial. |
Line 200: | Line 176: |
As we discussed in [:RussianTutorialClone], the new changeset only exists in this repository. This is a critical part of the way Mercurial works. Как сделать изменения доступными другим пользователям, рассказано в RussianTutorialShareChange. |
Как сделать изменения доступными другим пользователям рассказано в RussianTutorialShareChange. |
Line 205: | Line 179: |
CategoryTutorial CategoryRussian |
CategoryTutorial CategoryRussian |
Учебник - Создание первого изменения
(Это страница 4 из 9 серии учебников. Предыдущая часть - RussianTutorialHistory, следующая часть -RussianTutorialShareChange)
Начав с RussianTutorialHistory, теперь мы внутри репозитория my-hello, клонированного на странице RussianTutorialClone.
При работе с Mercurial рекомендуется изолировать связанные изменения в раздельном репозитории (смотри Лучшие практики). Это предотвращает смешивание независимого кода и упрощает тестирование персональных частей работы отдельно друг от друга. Давайте начнём, следуя этой рекомендации.
Наша цель проста - заставить программу "hello, world" ("Привет, мир") выводить другую строчку. Для начала мы создаем новый репозитарий my-hello-new-output клонированием my-hello для нашего небольшого проекта (используем Mercurial 1.0):
$ hg clone my-hello my-hello-new-output updating working directory 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Заметьте, что мы дали нашему новому репозитарию имя, описывающее его назначение. Сделать клон репозитария в Mercurial - это "дешевая" операция. Мы быстро накопим много слегка отличающихся репозитариев. Если мы не будем давать репозитариям описательных имён, то вскоре потеряем возможность отличить один от другого (see RepositoryNaming).
Пора внести изменения в новый репозиторий. Перейдём в рабочий каталог репозитория и отредактируем исходник нашим любимым редактором:
$ cd my-hello-new-output $ vi hello.c
Первоначальное содержимое hello.c выглядело так:
/*
* 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;
}
Отредактируем функцию main. Теперь она выводит еще одну строку:
(...)
int main(int argc, char **argv)
{
printf("hello, world!\n");
printf("sure am glad I'm using Mercurial!\n");
return 0;
}
Сделав это, выходим из редактора. Всё готово - можно создавать changeset.
Но что, если мы отвлеклись и забыли, какие изменения мы собирались внести в changeset? В таком случае мы воспользуемся командой status.
$ hg status M hello.c
Вывод краток, но префикс M говорит нам, что файл hello.c был модифицирован, и наши исправления готовы войти в changeset.
Вместо скучного hg status мы можем вводить забавный hg st - Mercurial позволяет сокращать команды, пока введённые символы однозначно определяют команду.
$ hg st M hello.c
Мы также можем просмотреть реальные изменения в файлах, используя команду 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; }
Если мы хотим отменить наши изменения и начать заново, мы можем использовать команду revert для восстановления hello.c в немодифицированное состояние (или использовать опцию --all чтобы откатить все файлы). Только убедитесь, что точно знаете, что при этом произойдёт (см. Revert).
$ hg revert hello.c
revert переименует модифицированный файл hello.c в hello.c.orig и восстановит hello.c в немодифицированное состояние.
status now lists hello.c.orig as not tracked (prefix "?").
$ hg st ? hello.c.orig
Если мы снова передумали и хотим использовать наши отменённые изменения, просто удаляем немодифицированный hello.c и переименовываем модифицированный hello.c.orig в hello.c
$ rm hello.c $ mv hello.c.orig hello.c $ hg st M hello.c
Процесс создания changeset'а называется Commit и выполняется командой commit. У команды commit есть замечательное сокращение: ci ("check in"), так что мы можем пользоваться ею так:
$ hg ci
При этом запустится редактор, отображая несколько загадочных строк текста.
Note: Редактор по умолчанию можно изменить, задав значение переменной окружения EDITOR или HGEDITOR.
HG: Enter commit message. Lines beginning with 'HG:' are removed. HG: -- HG: user: mpm@selenic.com HG: branch 'default' HG: changed hello.c
Первая строка пуста, а дальше следуют строки, идентифицирующие пользователя, имя ветки (branch) и файлы, входящие в changeset.
Ветка по умолчанию называется "default" (см. NamedBranches). Значение для "user" извлекается из конфигурационного файла ~/.hgrc - ключ "username" раздела "ui" (см. hgrc(5)). При необходимости имя пользователя можно указать в командной строке опцией -u (см. hg help ci или hg.1.html#commit).
Что бы зафиксировать(:Commit) changeset, мы должны его описать (см. ChangeSetComments). Введём что-нибудь такое:
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
Далее сохраняем текст, выходим из редактора и, если всё хорошо, команда commit завершится и ничего не напечатает.
Если вы выйдете из редактора, не сохранив или не введя текст, commit прервётся, так что в этот момент Вы ещё можете передумать.
Что же нам сейчас ответит команда status?
$ hg st
Ничего! Наши изменения были зафиксированы в changeset'е, поэтому нет измененных файлов, нуждающихся в фиксации. Наш tip совпадает с содержимым рабочего каталога.
Команда parents показывает, что наш рабочий каталог репозитория синхронизирован (see Update) с последним зафиксированным changeset'ом. Сейчас имеется только один родитель, что всегда происходит после выполнения команды commit. Мы увидим двух родителей в разделе TutorialMerge.
$ 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
Мы зафиксировали новый changeset.
Мы можем просмотреть изменения истории нашей работы:
$ 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 (...)
Примечание: Поля user, date, и changeset у Вас, естественно, будут другими.
Как мы говорили в RussianTutorialClone, новый changeset присутствует только в этом репозитории. Это важный момент для понимания работы Mercurial.
Как сделать изменения доступными другим пользователям рассказано в RussianTutorialShareChange.