Выбрать главу

Теперь надо сообщить системе управления версиями о появлении нового файла. Для этого используется команда add, которая выполняется из того же каталога, в котором находится новый файл

› cvs add todo.txt

cvs add: scheduling file `todo.txt' for addition

cvs add: use 'cvs commit' to add this file permanently

Файл todo.txt теперь помечен на добавление, но реально он будет помещен в репозиторий при выполнении команды commit, о чём и напоминает вывод этой команды. Вы также можете добавить ключ -m “comment” для указания комментария для добавленного файла. В отличие от многих других команд, в отсутствие ключа -m не будет открыт редактор для ввода комментария, вместо этого комментарий будет считаться пустым.

WINCVS Пометить файл(ы) на добавление в репозиторий можно командой Add selection из меню Modify, предварительно выделив их в списке

Аналогичным образом производится удаление файла - используется команда remove. Команда remove требует отсутствия файла в рабочем каталоге, то есть вы должны сначала удалить файл физически, иначе CVS откажется удалять его из репозитория:

› cvs remove readme.txt

cvs remove: file `readme.txt' still in working directory

cvs remove: 1 file exists; remove it first

Вы можете удалить файл самостоятельно:

› del readme.txt

› cvs remove readme.txt

cvs remove: scheduling `readme.txt' for removal

cvs remove: use 'cvs commit' to remove this file permanently

Или попросить сделать это CVS, используя ключ -f для команды remove

› cvs remove -f readme.txt

cvs remove: scheduling `readme.txt' for removal

cvs remove: use 'cvs commit' to remove this file permanently

Если же после удаления файла вы передумали и решили всё-таки не удалять его, выполнение команды add воскресит файл:

› cvs add readme.txt

U readme.txt

cvs add: readme.txt, version 1.1.1.1, resurrected

WINCVS Чтобы пометить файлы на удаление, воспользуйтесь командой Remove из меню Modify. Удаление локального файла произойдёт автоматически.

Помните, команды add и remove не производят операций с репозиторием (за исключением воскрешения файла), они только помечают их для выполнения операции во время отправки изменений в репозиторий.

Отправка изменений в репозиторий

После изменения исходных текстов в локальном каталоге необходимо отправить изменения в репозиторий. Изменения для каждого файла обрабатываются отдельно, поэтому редакция файла изменится только в том случае, если его содержимое отличается от того, что хранится в репозитории. Для сохранения результатов работы в репозитории используется команда commit. Давайте подробно рассмотрим, что происходит при выполнении этой команды:

› cvs commit -m “comment”

cvs commit: Examining.

Checking in readme.txt;

cvsroot/test/readme.txt,v ‹- readme.txt

new revision: 1.2; previous revision: 1.1

done

RCS file: cvsroot/test/todo.txt,v

done

Checking in todo.txt;

cvsroot/test/todo.txt,v ‹- todo.txt

initial revision: 1.1 done

Ключ -m “comment” задаёт комментарий к изменениям, чтобы впоследствии можно было легко определить, чем именно данная редакция отличается от предыдущей. Поскольку в любой момент можно посмотреть различие в тексте между любыми редакциями, нет смысла указывать, какие строчки добавлены или изменены. Цель комментария - описание результатов работы в целом, а не конкретных изменений. Комментарии являются очень важной частью работы команды, поскольку позволяют другим разработчиком узнать, что именно вы сделали, и скоординировать свою работу соответственно. Если кому-то интересны детали вашей работы, он может заглянуть в код, сравнить редакции и разобраться во внесенных изменениях. В конце концов, он может спросить Вас лично.

ПРЕДУПРЕЖДЕНИЕ CVS не заменяет управления, общения и других процессов, которые должны происходить при совместной разработке программного продукта несколькими участниками. CVS предназначен для отслеживания редакций исходных текстов и централизованного хранения проектных файлов.

Получив команду commit, CVS начинает изучение рабочего каталога. Пользуясь информацией, сохранённой в каталогах с именами «CVS», он определяет, какие файлы были изменены и выполняет для каждого операцию обновления. Для этого он получает из репозитория редакцию файла, находившуюся в рабочем каталоге до изменений, и сравнивает содержимое. При наличии изменений CVS создаёт в репозитории новую редакцию для этого файла, в которую внесены соответствующие поправки. Операция выполняется рекурсивно для всех подкаталогов.

WINCVS Чтобы отправить файлы в репозиторий, используйте команду Commit из меню Modify

В нашем примере изменился файл readme.txt и добавился файл todo.txt. После выполнения команды commit в репозитории создаётся новый файл для отслеживания редакций файла todo.txt, и текущему его содержимому присваивается номер 1.1. Измененному содержимому файла readme.txt присваивается номер 1.2. Мы по-прежнему можем получить редакцию 1.1 файла readme.txt, если нам это потребуется, но об этом я расскажу чуть позже.

Обновление рабочей копии

Если вы - не единственный участник проекта, и одним репозиторием пользуются одновременно несколько человек, то любой из них мог обновить репозиторий. В этом случае для работы с самыми свежими исходными текстами необходимо периодически выполнять операцию обновления рабочего каталога из репозитория. Процесс этот во многом симметричен процессу отправки изменений в репозиторий, хотя имеются и различия. Вы выполняете команду update, и изменения, произошедшие в репозитории, отражаются в рабочих файлах. Однако для того, чтобы посмотреть этот процесс в действии, понадобится еще один рабочий каталог. Чтобы его создать, воспользуйтесь командой checkout с ключом -d из каталога проектов (например, c:\projects):

› cvs -d:locaclass="underline" c:/cvs/repository checkout -d test2 test

cvs checkout: Updating test2

U test2/readme.txt

U test2/todo.txt

ПРЕДУПРЕЖДЕНИЕ Обратите внимание, что ключи -d до и после команды checkout имеют разный смысл. Первый указывает на местонахождение репозитория, а второй указывает, что файлы нужно получить в каталог test2, а не test

После выполнения этой команды будет создан второй рабочий каталог, связанный с тем же репозиторием и теми же файлами в нём. Таким образом, можно внести изменения в одном рабочем каталоге и получить их в другом, некоторым образом эмулируя работу нескольких программистов. Итак, измените в новом рабочем каталоге файл todo.txt (я добавил строчку «Some change» в конец файла) и выполните операцию commit для обновления репозитория:

› cvs commit -m "added line"

cvs commit: Examining.

Checking in todo.txt;

d:\temp\rep/test/todo.txt,v ‹- todo.txt

new revision: 1.2; previous revision: 1.1

done

СОВЕТ Команда cvs status показывает текущее состояние каталога - сообщает, необходимо ли обновление, какие редакции у локальных файлов и прочую полезную информацию.