From: Александр Данилов <daapp at land dot ru>
Newsgroups: http://fssg.st-oskol.ru/~alex/
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Краткое введение в систему контроля версий Arch
Оригинал: http://fssg.st-oskol.ru/~alex/arch/ArchPrimer.ru.html
Англоязычный оригинал руководства находится по адресу: http://repose.cx/ArchPrimer.html
Использование arch в однопользовательских проектах.
Это мини руководство представляет собой краткий обзор основных
возможностей системы управления версиями Arch. Руководство является
дополнением к учебнику по Arch и может быть рекомендовано к прочтению
первым с последующем переходам к другим источникам информации.
Создание архива
До того, как мы начнём работать с arch нам необходимо создать архив.
Архив - это всего лишь каталог на вашей файловой системе, в котором
будут храниться ревизии проекта. Архив не обязательно должен
находиться на локальной файловой системе, архив может находиться в
сети и быть доступен по HTTP, FTP, SFTP и т.д. Для начала мы будет
использовать архив на локальной файловой системе, дабы не усложнять
введение.
Если у вас уже есть опыт работы с CVS, то архив сродни CVSROOT.
Эти команды ассоциируют имя архива john@doe.com--myarchive с каталогом
~/myarchive затем помечают этот архив как используемый по умолчанию. В
результате выполнения этих команд также создаётся каталог ~/myarchive
и в него помещаются несколько файлов, необходимых для управления
проектом.
Мы можем проверить результат выполнения команд создания архива
попросив у Arch список доступных архивов:
Вы заметили, что john@doe--myarchive не единственный архив? Тот другой
архив - одно из мест, откуда можно получить последнюю версию Arch. В
Этом учебнике мы не будем пользоваться этим архивом.
Имя архива имеет следующий вид:
почтовый@адрес--имя-архива
Указывать реальный почтовый адрес необязательно - это всего лишь
способ сделать уникальным имя архива. Имена архивов должны следовать
этому соглашению о наименовании.
Установление вашей личности
Перед тем, как импортировать ваш первый проект необходимо установить
свою личность. Делается это с помощью команды my-id:
john@shell% tla my-id "John Doe <john@doe.com>"
Arch будет помнить вас (так же как помнит ваш архив по умолчанию). Это
необходимо, например, для создания записей в журнале изменений.
Импорт вашего первого проекта
После того как вы создали архив и идентифицировали себя можно
приступать к импорту нового проекта. Для этого необходимо перейти в
каталог с исходными кодами проекта, называемый рабочий каталог или
дерево проекта. В качестве примера будем использовать очень простой
проект под названием "hello world":
john@shell% cd $wd/hello
john@shell% ls
hello.py world.py
Присвоение имени проекту
Первый шаг к импорту проекта - присвоение ему имени. Давайте назовём
этот проект:
hello--dev--1.0
Имя состоит из трёх частей, соединённых двойным тире.
* hello называется именем категории. Это имя проекта без какой-либо
информации о версии
* dev - имя ветви. Здесь dev означается development (находиться в
стадии разработки). Стабильную ветку можно добавить позже
* 1.0 - номер версии. По традиции номер версии состоит из двух
чисел, разделённых точкой, но вы можете использовать любое
количество чисел.
Arch навязывает такой способ наименования. Хотя он и кажется сначала
несколько непривычным, но позволяет обратиться к произвольной ревизии
кода достаточно удобным способом.
Для именования проекта мы инициализируем наш каталог как рабочий
каталог arch с помощью команды init-tree:
john@shell% tla init-tree hello--dev--1.0
john@shell% ls
hello.py world.py {arch}
Обратите внимание на появившийся каталог {arch}. Он содержит
информацию об имени проекта, ассоциированном с проектом архиве и т.д.
Маркировка файлов для добавления
По умолчанию Arch использует метод явной маркировки. Это означает, что
вам необходимо явно указать Arch какие файлы необходимо включить в
архив. Это делается с помощью маркировки. Например, мы хотим включить
все файлы в архив.
john@shell% tla add-tag *.py
Проверить, были ли файлы добавлены в архив можно заглянув в опись
наших файлов:
john@shell% tla inventory
S ./hello.py
S ./world.py
Символ S означает что файлы опознаны системой контроля версий Arch.
Если бы мы их не пометили, то они были бы отмечены как неопознанные
(U):
john@shell% tla inventory
U ./hello.py
U ./world.py
Импорт начальной ревизии
Теперь мы готовы к импорту нашего рабочего каталога в архив. Эта
операция состоит из двух шагов: создание необходимых категорий, ветвей
и ревизий в архиве и непосредственно импортирование. Для этого
воспользуемся новой возможность, появившейся в tla версии 1.1 и
сделаем это с помощью одной команды:
Поздравляю! Если вы следовали всем указаниям, то самое трудное уже
позади. Оставшаяся часть руководства расскажет вам как сделать свою
жизнь проще с помощью Arch.
Простые задачи
Что изменилось
Итак, проект импортирован. Теперь можем заняться его изменением.
Представьте, что John Doe изменил файл hello.py - теперь строка с
приветствием выводится 5 раз, а не один. Перед тем, как зафиксировать
изменения в архиве мы хотим взглянуть на них и убедиться, что они
корректны и не содержат отладочного кода.
Для этого воспользуемся командой what-changed:
john@shell% tla what-changed
M ./hello.py
Из результата выполнения команды становиться ясно, что файл hello.py
был изменён (M). Для того, чтобы узнать что же конкретно изменилось и
увидеть различие между версией в архиве и текущим файлом, необходимо
указать в команде what-changed аргумент:
-print "hello"
+for i in range(5):
+ print "hello"
Из результата выполнения команды можно заключить, что одна строка была
удалена из файла, а две добавлено.
Обратите внимание, на то, что эти команды используют кэшированную
копию последней версии архива, называемую первоначальное дерево
(первоначальное потому, что это немодифицированная версия последней
ревизии). Это особенно удобно для разъединённых операций - у вас нет
доступа к архиву для того чтобы увидеть, что же изменилось.
Быстрое фиксирование изменений
John счастлив от того, что его изменения именно такие, как он и
ожидал, и теперь он жаждет зафиксировать эти изменения в архиве. Для
этого у Arch есть команда commit:
john@shell% tla commit -L "print hello 5 times instead of 1"
M ./hello.py
* update pristine tree (john@doe.com--myarchive/hello--dev--1.0--base-0
=> hello--dev--1.0--patch-1)
* commited john@doe.com--myarchive/hello--dev--1.0--patch-1
Обратите внимание на аргумент -L. Он позволяет указывать сообщения для
журнала изменений прямо в командной строке. Это удобно для быстрого
внесения изменений, но иногда необходимо более подробное сообщение. В
этом случае вы можете создать сообщение до того, как будете
фиксировать изменения.
Фиксирование изменений с файлом журнала
В случае, если объём вносимых изменений значителен, необходимо более
тщательное их описание. В этом случае необходимо воспользоваться
командой make-log:
Строка summary вверху используется для краткого описания - обычно не
более 60 символов. Ключевое слово field используется не часто. Любой
текст расположенный ниже ключевых слов рассматривается как тело
сообщения и может быть любого размера.
John создал такое сообщения для журнала изменений:
Summary: print hello 5 times instead of 1
Keywords:
Upon a request from a user, I have made hello print 5 times instead of 1. You
can still obtain the old functionality by running hello | tail -1. Comments
on this change are welcome.
Когда John готов зафиксировать изменения, то он не использует аргумент .-L:
john@shell% tla commit
M ./hello.py
* update pristine tree (john@doe.com--myarchive/hello--dev--1.0--base-0
=> hello--dev--1.0--patch-1)
* commited john@doe.com--myarchive/hello--dev--1.0--patch-1
Получение списка изменений
Для просмотра изменений в архиве можно воспользоваться командой
revisions. Также можно воспользоваться командой log-ls, которая
отображает изменения в рабочем каталога. Возможна такая ситуация,
когда количество обнаруженных вами изменений в рабочем каталоге будет
меньше, чем в архиве, это происходит тогда, когда над одной веткой
работает несколько человек, эту ситуацию мы не будем здесь
рассматривать.
Эти описания изменений содержаться в журналах исправлений. Каждый
журнал исправлений выглядит как почтовое сообщение и содержит описание
изменений, дату и т.д. Журналы изменений хранятся и в архиве и в
рабочем каталоге, так что если вы работаете над каким-то кодом на
переносном компьютере и не имеете доступа к архиву, то вы всё же
сможете посмотреть список всех изменений, которые были внесены в
дерево.
Команда revisions выглядит следующим образом:
john@shell% tla revisions --summary
base-0
initial import
patch-1
print hello 5 times instead of 1
Для ветви с одним разработчиком команда log-ls будет всегда печатать
одно и тоже. На нижеследующем примере показано использование
дополнительного аргумента, принимаемого командой:
john@shell% tla log-ls --summary --creator
base-0
John Doe <john@doe.com>
initial import
patch-1
John Doe <john@doe.com>
print hello 5 times instead of 1
Обратите внимание на имя создателя (creator name) - этот то самое имя,
которое мы использовали в команде my-id ранее.
Генерация файла changelog
Журналы исправлений, о которых упоминалось ранее содержат гораздо
больше информации, чем мы видим используя команды log-ls и revisions.
Для получения этой дополнительной информации у Arch есть команда
changelog:
john@shell% tla changelog
# do not edit -- automatically generated by arch changelog
# arch-tag: automatic-ChangeLog--john@doe.com--myarchive/hello--dev--1.0
#
2003-07-13 09:36:33 GMT John Doe <john@doe.com> patch-1
Summary:
print hello 5 times instead of 1
Revision:
hello--dev--1.0--patch-1
Upon a request from a user, I have made hello print 5 times instead of 1.
You can still obtain the old functionality by running hello | tail -1.
Comments on this change are welcome.
modified files:
./hello.py
2003-07-13 08:58:18 GMT John Doe <john@doe.com> base-0
Команда changelog команда извлекает из репозитария список изменений, в
случае если ваш рабочий каталог давно не обновлялся, то вы увидите
весь список изменений.
Извлечение ревизий из архива
Представьте себе, John заметил, что его новая версия hello неправильно
работает с другими программами, использующими её. Для того, чтобы
удостовериться, что проблема связана с обновлением, которое сделал он
сделал, John хочет получить доступ к предыдущему выпуску.
Он начинает с просмотра изменений (так как он забыл, что делал
последний раз с программой):
john@shell% cd
john@shell% tla revisions --summary hello--dev--1.0
base-0
initial import
patch-1
print hello 5 times instead of 1
Обратите внимание на то, каким образом имя проекта указывается для
команды revisions. Это от того, что мы сейчас находимся не в рабочем
каталоге таким образом нет ассоциированного проекта.
John, посмотрев на список решил, что ему нужна базовая версия (он
вероятно выбрал раннее исправление, если их там несколько). Для
получения версии base-0 он может выполнить следующую команду:
john@shell% tla get hello--dev--1.0--base-0
* from import revision: john@doe.com--myarchive/hello--dev--1.0--base-0
* making pristine copy
* tree version set john@doe.com--myarchive/hello--dev--1.0
В результате этого появился каталог hello--dev--1.0--base-0. В случае
необходимости можно явно указать имя каталога:
john@shell% tla get hello--dev--1.0--base-0 mydir
Если вам необходима последняя ревизия, то для такого случая есть
сокращение - можно не указывать спецификатор версии (base-0, patch-1 и
т.д.). Пример:
john@shell% tla get hello--dev--1.0
Автор: Damien Elmes - web@repose.cx
Перевод: Александр Данилов - daapp at land dot ru
405 Прочтений • [Краткое введение в систему контроля версий Arch (cvs version)] [08.05.2012] [Комментариев: 0]