Или как использовать WinCvs и остаться в здравом уме.
Перевод на Русский язык
Getos Ltd. info@getos.belgorod.su
Этот документ описывает каждодневное использование WinCvs 1.0.x клиента. Это не введение в систему контроля версий, не введение в CVS, и не введение в WinCvs. Это похоже на место, куда вы можете вернуться если вы приблизительно знаете, что вы хотите сделать, но не совсем помните как это сделать.
Предполагается, что вы уже инсталлировали WinCvs и сконфигурировали ее для «разговора» с репозиторием CVS, который вы хотите использовать.
Если ваш броузер поддерживает таблицы цвета, то в этом документе вы встретитесь с выделением текста различным цветом. относится к элементам пользовательского интерфейса WinCvs, таким как кнопки, закладки и метки полей ввода. Ссылки на оригинальную документацию по CVS даны дроугим стилем.
Терминолоия, используемая в документации по CVS, и соответственно в WinCvs, может отличаться от терминологии, используемой другими системами для репозиториев исходного кода. Пытаясь избежать недоразумений, мы даем краткий список наиболее важных терминов. Пожалуйста, ознакомьтесь с этими словами, прежде чем погрузиться в оставшуюся часть этого документа.
Checkout
Обычно используется для
описания первого возвращения всего модуля из репозитория.
Commit
Отправляет сделанные
вами изменения в репозиторий.
Export
Обозначает извлечение
всего модуля из репозитория, без каких-то административных файлов CVS:
Экспортируемые модули не будут подконтрольны CVS.
Import
Обычно относится к
процессу создания нового модуля в репозитории после отправления туда всей
структуры директориев.
Module
Иерархия какого-то
директория. Проект программного обеспечения обычно представлен в репозитории единственным
главным модулем.
Release
Версия всего проекта.
Revision
Версия одного файла.
Tag
Символическое имя,
которое присваивается ряду файлов на заданное время разработки.
Update
Позволяет получить из репозитория
изменения, сделанные другими пользователями. Обновляет только локальную копию.
Подробнее о "ревизиях", "релизах", "версиях" и "тагах", см. главу 4 документации по CVS.
Передача проекта для контроля версий называется импортом (importing) по терминологии CVS. Подразумевается, что вы должны иметь что-то для импорта на CVS сервер, прежде чем думать о контроле версий.
CVS не хватает хорошей поддержки реструктурирования иерархии файлов проектов, поэтому вы можете избежать многих проблем, если потратите какое-то время на планирование, прежде чем импортировать новый модуль.
Базовой для операции импорта является "чистая" структура директориев. Под чистой мы подразумеваем то, что файлы, для которых не нужен контроль версий (файлы созданные компилятором, .BAK файлы и т.д.) удалены. Это в частности важно, если ваш проект уже разрабатывался какое-то время. Вы можете иметь несколько файлов в вашей иерархии, которые вы не хотите передавать под контроль версий, но которые вы, тем не менее, хотите держать там, где они есть. В этом случае вы должны удалить их, прежде чем импортировать, после этого вернуть назад.
Учтите, что CVS трактует пустые директории как несуществующие. Если вы хотите добавить директорию в которой нет ни файлов ни поддиректорий, то вы должны создать какой-то временный файл в нем. Мы полагаем, что вы создадите файл README.txt, который содержит краткое описание того, для чего нужен этот директорий.
Раз вы имеете структуру каталогов, которая содержит лишь те файлы, которые вы хотите иметь в репозитории, сделайте следующее, чтобы импортировать этот модуль используя WinCvs:
WinCvs теперь импортирует всю вашу иерархию директории на сервер CVS. Заметьте, что ничего не произойдет с вашими локальными файлами при операции импорта. Это означает, что ваша локальная копия после импорта не будет под контролем версий. До начала работы вы должны сделать следующее:
Теперь вы сможете начать работать с вашей версией контроля проекта.
[ CVS Doc: "Starting a project with CVS" ]
Первое получение модуля с сервера CVS называется checkout. Получение модуля из репозитория дает вам локальную копию иерархии директория, составляющего модуль. Чтобы выполнить чекаут сделайте следующее:
Если вы установите Кто редактирует этот файл?.
, то вам будет необходимо указать WinCvs какие файлы вы намерены редактировать, прежде чем их редактировать. Это может быть неудобно, но это позволяет другим разработчикам отслеживать, кто в настоящий момент редактирует данные файлы. Более подробно об этом смотрите в разделе[ CVS Doc: "checkout -- Check out sources for editing" ]
Время от времени вам придется встраивать в вашу локальную рабочую копию изменения, сделанные другими. Процесс получения изменений с сервера в вашу локальную копию называется обновлением (updating). Обновление можно выполнить с одним файлом, набором файлов или рекурсивно с целой иерархией директориев. Для обновления сделайте следующее:
Изменения, сделанные другими будут объединены с вашими файлами, сохраняя любые изменения, которые вы могли сделать с этими же самыми файлами. На репозиторий изменения не влияют.
Если вы получите сообщения о конфликтахпри обновлении, то пожалуйста, прочитайте следующий раздел.
[ CVS Doc: "Bringing a file up to
date" ]
[ CVS Doc: "update -- Bring work tree in
sync with repository" ]
Когда нибудь CVS сервер выдаст сообщение о конфликте при загрузке и обновлении ваших файлов с репозитория. Конфликт возникает когда два или более разработчика изменили несколько одинаковых строк какого-то файла. Поскольку CVS ничего не знает о вашем проекте, она оставляет разрешение конфликтов разработчикам. При получении сообщения о конфликте, вы должны открыть запрашиваемый файл и найти строки, начинающиеся с символов <<<<<<<. Область конфликта маркируется так:
<<<<<<<
filename
ваши изменения
=======
код, полученный из репозитория
>>>>>>>
revision
Вы должны решить, как должен выглядеть код и сделать необходимые изменения, удалив разметку CVS и передав (commit) ваши изменения в репозиторий.
[ CVS Doc: "Conflicts example" ]
Передача локальных модификаций на сервер называется committing.
Обратите, пожалуйста, внимание, что передача изменений не влечет за собой автоматического добавления новых файлов, которые вы создали в репозиторий. См. Добавление файлов и директорий для описания как это делается.
[ CVS Doc: "commit -- Check files into the repository" ]
WinCvs можно использовать для просмотра статуса, logs, изменений и т.п. для файлов и директорий.
Вот краткое объяснение того, что можно ожидать от различных статус команд.
Diff
Позволяет вам сравнить
вашу локальную копию файла с любой ревизией того же самого файла в репозитории.
Позволяет также сравнить различные ревизии в репозитории. Результат состоит из
строк, начинающихся с < или >, помечая этими символами строки, которые
должны быть соответственно удалены или добавлены из вашей ревизии к той , с
которой вы ее сравниваете.
Log
Показывает log messages,
даты, таги, авторов, и т.д. для всех ревизий данных файлов (если вы не
ограничиваете какие ревизии показать).
Status
Отображает статус
модификации заданных файлов, т.е. изменены ли файлы локально или в репозитории.
Также показывает как локальные, так и репозитарные номера ревизии и таги, если
они есть.
Graph
Довольно крутая
особенность, показывающая график ревизии для какого-нибудь одного файла. В
частности полезна, когда у вас в истории ревизии файла имеется одна или более
ветвь. Локальная ревизия помечается значком документа. График позволяет вам
выбрать две ревизии (используя кнопку shift по ряду причин) и сделать сравнение
между ними.
[ CVS Doc: "diff -- Show differences
between revisions" ]
[ CVS Doc: "log -- Print out log
information for files" ]
На заданной стадии разработки, присвоение одному или более файлам некоторой общей метки для ссылки на их ревизии, известно как маркировка (tagging) этих файлов. Маркировка обычно используется в целом для модулей, так чтобы текущее состояние модуля можно было реконструировать в будущем. Этот тип маркировки должен быть всегда сделан при поставке проекта и до начала значительных изменений.
Чтобы пометить один или более файлов или директорий какой-то меткой сделайте следующее:
Обратите внимание, что CVS довольно ограничено при выборе символов, которые может содержать метка: Маркер должен начинаться с буквы и может содержать только буквы, цифры, "-" (тире) и "_" (нижняя черта). В частности, это значит, что нельзя использовать точки и пробелы. Если вы хотите включить номер версии в метку, то точки замените на тире. Зарезервированы два имени маркера, поскольку они имеют специальное значение в CVS: "HEAD" относится к самой свежей версии доступной в репозитории, тогда как "BASE" является ревизией, которую вы последний раз скачали в локальную директорию.
[ CVS Doc: "Tags -- Symbolic revisions" ]
Когда вы создаете новые файлы, которые вы хотите включить в репозиторий, вам необходимо сказать CVS обработать эти файлы. Если директория содержит не контролируемые CVS файлы, то вам надо добавить их в следующим образом:
Если вы хотите добавить всю иерархию директориев вместо нескольких файлов, то вышеприведенная техника становится обременительной, поскольку операция add не является рекурсивной. В этом случае лучше использовать импорт, как описано в разделе Создание нового модуля:
WinCvs теперь импортирует всю вашу иерархию директориев на CVS сервер в выбранный модуль. Заметьте, что ничего не изменится в ваших локальных директориях при операции импорта. Это означает, что ваша локальная копия не будет под контролем версий после импорта. Для контроля новой иерархии получите ее копию из репозитория:
WinCvs предоставит вам свежую копию вашей иерархии с контролем версий.
[ CVS Doc: "Adding, removing, and renaming files and directories" ]
Чтобы удалить файлы, вы вначале должны пометить удаляемые файлы и затем выполнить команду commit, сообщая об изменении:
Теперь файлы будут удалены из репозитория. Заметьте, что файлы удаляются не физически, а скорее помечаются как "мертвые". Таким образом все еще остается возможность восстановить эти файлы, если вы решите вернуться к старой версии модуля.
Директории удаляются иначе. Опционально CVS удалит пустые директории, когда вы обновите (update) одну из его родительских директорий. Если вы хотите освободится от пустой директории, сделайте следующее:
Директория будет удалена, если все ее файлы были предварительно удалены с вашей локальной копии и из репозитория на сервере.
[ CVS Doc: "Adding, removing, and renaming files and directories" ]
Операции по перемещению и переименованию файлов или директорий недоступны в CVS. Это одно из ограничений CVS. Чтобы выполнить перемещение и переименование вы должны скомбинировать операции перемещения и добавления. См. Добавление файлов и директорий и Удаление файлов и директорий.
[ CVS Doc: "Moving and renaming files" ]
Одной из особенностей системы контроля версий является способность изолировать изменения в отдельной линии разработки. Эта линия известна как ветвь (branch). (См. What branches are good for в документации по CVS)
Чтобы создать ветвь, сделайте следующее:
Теперь в репозитории будет создана новая ветвь с заданным именем. Замечание: Ветвь создается только в репозитории. Чтобы начать работать с вновь созданной ветвью вы должны сделать то, что описано в разделе Selecting a Branch to Work on.
[ CVS Doc: "Branching and merging" ]
Чтобы начать работать с ветвью вместо генеральной линии разработки, вам необходимо связать вашу локальную копию с этой веткой. Это необходимо для того, чтобы быть уверенным, что такие действия как updates, commits и т.д. выполняются с ветвью, а не с главной линией разработки.
Для перемещения вашей локальной копии в другую ветвь сделайте следующее:
WinCvs теперь сделает необходимые изменения в вашей рабочей копии и переместит ее в необходимую ветвь. Обновление может включать добавленные или удаленные файлы.
CVS устанавливает sticky tags для файлов, на которые воздействует эта ветвь. Вы можете просматривать эти sticky tags запуская команду status для этих файлов, как описано в Viewing Changes. Чтобы удалить sticky tags и таким образом вернуться к главной линии разработки, следуйте описанию в Going Back to the Main Line of Development.
[ CVS Doc: "Accessing branches" ]
Если вы удовлетворены внесенными вами в ветвь изменениями, то вы можете пожелать сделать эти изменения доступными в главной линии разработки. Встраивание изменений из одной ветви в другую называется объединение (merging). Для объединения ветви сделайте следующее:
Любые изменения в ветви теперь будут объединены с вашей локальной копией. Вероятно вы захотите передать объединенные файлы назад в репозиторий, как описано в Передача ваших изменение в CVS.
Важное замечание: Данное выше объединение будет пытаться объединить изменения с начала ветви. Если вы делаете эту операцию второй раз (чтобы объединить изменения, сделанные с ветвью после последнего объединения), то вам вовсе не нужно делать объединение сначала ветви, и это, наиболее вероятно, добавит вам хлопот. Чтобы преодолеть эту проблему, вы должны давать ветви новый тег после каждого объединения, и использовать новый тег при указании имени ветви для последующих слияний.
[ CVS Doc: "Merging an entire branch" ]
Если вы хотите приостановить работу на ветвью и переместить вашу локальную копию назад на главную линию разработки, то вы должны указать WinCvs удалить все sticky tags. Чтобы удалить sticky tags и таким образом обновить вашу локальную копию to the main development line, сделайте следующее:
WinCvs теперь обновит вашу локальную копию так, что она будет соответствовать текущей главной линии разработки. Ветвь, в которой вы были, все еще существует в репозитории и вы можете вернуться к ней как описано в разделе Selecting a Branch to Work on когда захотите.
Можно спросить CVS кто в настоящий момент редактирует некоторый файл, но это срабатывает только в том случае, если разработчики уведомляют CVS когда они намереваются править файл. Эта модель известна как IR CVS модель, и необходимо решить в начале работы над проектом о целесообразности ее использования.
Чтобы использовать модель IR CVS, разработчики должны выполнить операцию check out для модуля с опцией только для чтения (read only). Это может быть сделано пометив флажок
на закладке каждого диалога WinCvs.Чтобы отредактировать файл сделайте следующее:
Когда вы передаете файл, CVS сервер предполагает, что вы его больше не редактируете и WinCvs сделает этот файл снова доступным только для чтения. Если вы не сделали никаких изменений, то операция commit не сообщит серверу CVS, что вы завершили его редактирование. В этом случае вы должны сделать скорее следующее:
А теперь вернемся к первоначальному вопросу: "Кто редактирует этот файл?" Чтобы получить список редактирующих, если есть таковые для этого файла, сделайте это:
WinCvs теперь выдаст список тех, кто редактирует этот файл.
[ CVS Doc: "Multiple developers" ]
1. Что означают таинственные буквы, появляющиеся при обновлении?
См update output в руководстве по CVS.
2. Время на сервере неверное! Теги и логи показывают неверное время!
Это особенность (feature). CVS будет всегда использовать UTC для журнализации.
CVS и WinCvs отличаются от Visual Source Safe (VSS) по многим параметрам. Наиболее очевидная особенность может быть в том, что CVS не требует от пользователей замыкать файлы с которыми они работают, как это делает по умолчанию VSS. Фактически, документация CVS даже encourages пользователей не использовать замыкание файлов. В редких случаях, когда несколько людей одновременно изменяют один и тот же файл, CVS будет обычно способна объединить их изменения. Если два или более разработчика изменили одни и теже несколько строк, CVS сообщит о конфликте, вставит директивы в этот файл и оставит его разработчикам чтобы они решили что делать. Такие конфликты крайне редки, поскольку встречаются в результате плохой коммуникации между разработчиками (например, два человека пытаются исправить одну и ту же проблему).
Другое важное отличие состоит в том, что VSS дает вам «взгляд с сервера», в то время как WinCvs показывает «взгляд клиента». На практике это означает, что, в отличии от VSS, WinCvs не сообщит вам об изменениях в репозитории до тех пор, пока вы не сделаете update, или явно не сделаете запрос о статусе выбранных файлов. Изменения, отображаемые в файловом окне WinCvs, отражают изменения, сделанные вами после последней операции checkout, update или commit.
CVS не так "визуальна" как VSS. При использовании
WinCvs, становится ясно, что CVS была в течении многих лет программой с
командной строкой, прежде чем кто-то решил встроить ее в графический интерфейс
пользователя GUI. Некоторые из нас предпочитают упрощенный подход WinCvs,
который может дать чувство контроля для опытных пользователей. Другие она не
понравится. Если вы один из последних, то можете улучшить программу и
предоставить ваши изменения сообществу или воспользоваться более простой
программой TortoiseCVS (http://www.cvsgui.org/TortoiseCVS/guide.html).
2000-04-28 Sverre --
mailto:shh@computas.no |
Brought to you
by Computas AS. |