Командная разработка

Н

А командную разработку (team development) иногда ссылаются как на управле­ние версиями (version control). Если быть более точным, то командная разра­ботка в среде JBuilder — это как раз то место, которое и связано с управлением вер­сиями.

JBuilder предлагает несколько вариантов систем управления версиями. Система параллельных версий (Concurrent Versions System, CVS) представляет собой прило­жение с открытым исходным кодом, входящее в состав редакций SE и Enterprise сре­ды JBuilder. Лично я активно пользуюсь CVS, и этот раздел главы будет полностью посвящен использованию CVS в среде JBuilder. Для тех, кто имеет дело с редакция­ми Personal, в конце главы будет кратко рассмотрено использование системы CVS в режиме командной строки.

Я опишу процесс входа на CVS-сервер дважды в этой главе. Первый пример де­монстрирует вход на локальный CVS-сервер, а второй пример, находящийся в разде­ле, посвященном работе с командной строкой, рассказывает о регистрации на сер­вере PServer. Последняя опция часто используется при необходимости соединения с удаленным компьютером. PServer представляет собой сокращение от "password server" ("сервер паролей"). Он эффективен тем, что обеспечивает минимально необ­ходимую степень безопасности.

Зачем нужна система CVS?

Для использования системы CVS необходимо предварительно создать каталог, который будет служить в качестве репозитория проектов. Система CVS позволяет считывать проекты из репозитория, вносить в них изменения и записывать их об­ратно в репозиторий При каждом внесении изменений и записи проекта в репози­торий система CVS создает новую версию проекта и присваивает ей имя. Тем не ме­нее, версия, которая находилась в репозитории до записи новой версии, также оста­ется. Таким образом, при работе над проектом вы будете располагать всеми промежуточными версиями.

Основная причина использования системы CVS заключается в обеспечении воз­можности одновременной работы над одним и тем же проектом нескольких разра­ботчиков. Например, если над проектом работают два человека, очень важно, чтобы каждый и* участников знал об изменениях, внесенных другим участником проекта. Если один из разработчиков остался за своим компьютером допоздна и трудился над проектом, то каким образом второй разработчик, который ушел домой и решил поработать над проектом дома, в тишине и покое, может узнать о последних вне­сенных изменениях? Если оба участника проекта используют систему CVS, то раз­работчик, оставшийся в офисе, может записать внесенные им изменения в репози­торий, а разработчик, ушедший домой, сможет получить доступ к самой последней версии с помощью команды обновления системы CVS, что даст ему возможность ра­ботать с последней версией проекта.

Вторая причина состоит в возможности хранить версии одного и того же проекта на нескольких машинах. Например, если вы работаете над проектом и в офисе, и дома, систему CVS можно использовать для синхронизации двух версий проекта (в офисе и дома). Если вы иногда разрабатываете программы под управлением опера­ционной системы Windows и хотите сохранить тот же проект на Linux-машине, CVS может гарантировать идентичность двух версий (на машинах с разными операцион­ными системами).

Кроме того, система CVS позволяет сохранять версии проекта. Например, систе­му CVS можно использовать для маркировки версии 1.0 вашей программы. После этого вы имеете возможность начать работу над версией 2.0, зная, что при необхо­димости всегда можно вернуться к исходному коду версии 1.0. Очевидно, это ис­ключительно полезно в случае, если с проектом пошло что то не так.

Средства командной разработки в среде JBuilder в последних версиях стали дос­таточно разнообразными. Поиск качественной системы CVS — задача не из легких, особенно для платформы Windows. Я обнаружил, что система CVS среды JBuilder позволяет работать не только с проектами на Java, но и со всеми моими проектами, которые были зарегистрированы в системе CVS. Среду JBuiIder можно использовать для управления проектами, разработанными не только на языке программирования Java. Например, я применял JBuilder для управления разработкой текста этой книги.

Терминология

Возможно, одним из самых основных вопросов, касающихся терминологии, с которой вам предстоит столкнуться, является разница в значении терминов "фикса­ция" и "обновление”. При фиксации (commit) данные помещаются в репозиторий, в то время как при обновлении (update) данные считываются из репозитория. Ма­ловероятно, чтобы вы неправильно поняли значение слова "фиксация". Оно выбрано для обозначения операции внесения в репозиторий локальной копии проделанной ра­боты. Тем не менее, вас может сбить с толку слово "обновление". Что же обновляется: репозиторий или локальная копия? Теперь вы уже знаете, что обновляется ваша ло­кальная система. Самый эффективный способ запоминания назначения операции обновления заключается в понимании назначения операции фиксации, при этом памятуя, что операция обновления выполняет обратную функцию.

Добавление проекта и файлов в систему CVS

Чтобы воспользоваться средствами командной разработки среды JBuilder необ­ходимо сначала создать проект. Закройте все открытые проекты и выберите в меню File I New. На странице Project диалогового окна Object Gallery выберите Project и на­жмите кнопку OK. На странице Step 1 мастера проектов Project Wizard введите имя проекта (в нашем случае CvsProject) и щелкните на кнопке Finish. JBuilder создаст

ст*д№
version control system:
x none ciearcase
!visual sourcesafe
-∑1рис. 26.1. выбор пункта cvs в диалоговом окне select project vcsСтандартный проект. Даже несмотря на то, что на данный момент проект факти­чески пуст, его можно поместить в репо­зиторий системы CVS. Выберите в меню Team ∣ Select Project VCS… (Команда | Вы­берите VCS для проекта…). В появив­шемся диалоговом окне выберите CVS (см. рис. 26.1).

create a local cvs reposftory∣ ; «rami ∣ifc*n>v ∣u≈ ^∣ρ; ∏β r∙ v⅛r∣m^ won row⅛cw∏m∙≈wtrtβm „ ec,( w,4ftβr.,j»new<flruΛθ~tob'.uβaαΛ⅛ ιwts∣n pmwрис. 26.2. создание репозиторияПри открытии меню Team вы, воз­можно, обратили внимание на то, что единственным доступным пунктом в нем был как раз Select Project VCS. Откройте меню Team еще раз. Теперь в нем доступно несколько пунктов. Для указания пустого каталога в каче­стве репозитория проекта выбери­те пункт Create Local Repository…

(Создать локальный репозито­рий…). Для перехода к желаемому каталогу воспользуйтесь кнопка­ми, как показано на рис. 26.2.

После щелчка на кнопке OK на эк­ране появится сообщение, уведомлящее об успешном создании репозитория.

В панели проекта вы увидите файл CvsProjectjpx. Выполните щелчок правой кнопкой мыши на файле CvsProjectjpx и в контекстном меню выберите пункт CVS | Place Project into CVS… (CVS ∣ Поместить проект в CVS…), как показано на рис. 26.3. Эта же команда доступна и через меню Team.

рис. 26.3. доступ в контекстное меню проекта file edit feeardɪ a⅛ roiod run team *n⅛∙.a. jools wbalw hdo,⅛j add htes < packann-
r⅛∙naιw '< .*toj -∙4p> cjnewfow-*
,place pn9√ctmtouv8,wbihder- (j 'dnnimeirts and semtnqs,'mar<jle,')l>proje<l,'cyspro)ect,'cy5pro)rttt.jj>κ

JBuilder проведет вас через три шага мастера CVS NMzard, который позволяет до­бавлять проект в выбранный CVS-репозиторий. На шаге 1 в качестве типа соедине­ния выберите Local (Локальное). При этом созданный вами каталог репозитория появится в поле Repository Path (Путь репозитория), как показано на рис. 26.4.

Для перехода на следующую страницу мастера, которая изображена на рис. 26.5, щелкните на кнопке Next. Примите параметры по умолчанию и снова щелкните на кнопке Next.

На шаге 3 можно выбрать файлы и каталоги, которые будут помещаться в репо­зиторий (см. рис. 26.6). Оставьте значения по умолчанию и щелкните на кнопке Finish. Как правило, в репозиторий не помещаются каталоги рабочих копий и от­компилированных файлов классов.

s
'я
,wθflln s⅞iwljf ⅛
⅛⅛ffc~ г
,l⅜rp f
j- ∙, ’ г
,connecttyoe,module location
reodsttoh patli⅛ijo ztempzrnyrepositoiy modulenamt icvsproject
,25 plate project into cvs - step 1 of 3
рис. 26.4. шаг 1 мастера cvs wizard

I ЁИ* I I Cancel J Help

После щелчка на кнопке Finish система CVS проверяет, не присутствует ли уже в указанном каталоге проект, который помещается в репозиторий. Далее на экране появится сообщение о том, что система CVS успешно поместила проект в каталог репозитория (см. рис. 26.7).

Если внимательно посмотреть на рисунок 26.7, то несложно заметить, что неко­торые команды имеют префикс U. Префикс U представляет собой сокращение от слова update (обновление). Как вы уже знаете, система CVS позволяет фиксировать файлы в репозитории и обновлять файлы, хранящиеся в локальной системе. Каким образом процесс помещения нового проекта в репозиторий связан с обновлением?

Ответ на этот вопрос заключается в том, что JBuiIder и CVS "за кулисами" выпол­няют достаточно большой объем работы. Во-первых, ваш новый проект помещается в репозиторий.

о ивее projcet into cvs - step 3 of 3,ci~c√e directories and hi es to kci ut-i~xclu11,¾* ⅛ 5 ∙ -
se-9ct di. ectotfee jndιilet ɪouwanttobu inciudeumrepisitoiy duec*∏ηw and wee wħlch ere no? checked ’mil net be inctuden ∣n
,□ qjbak
□ 3 classes
0sv<∙
рис. 26.6. шагз мастера cvs wizard

——— —

2-<

O⅞g L,,⅛*≠∙j

Cancel I

Heip

Placing Project into CVS

xjJjChecking to make sure that CvsProJect does not already exist.

8cvs. e«e checkout Updating cvsPtoJβct

Й

JU cvsPro∣ectf. cvsignore U cvsProjectfcvsProJect)px Project Siiccesfuliyjif-Seeil ftrto CVS

Рис. 26.7′. Диалоговое окно Placing Project into CVS (Помещение проекта в CVS), Уведомляющее об успешно выполненном действии

jlJd

Close

Затем каталог, в котором он находится, переименовывается на CvsProject. prβcvs. В этом каталоге будет храниться старый вариант проекта в том состоянии, в кото­ром он пребывал до использования CVS. Затем проект считывается из репозитория и помещается в каталог CvsProject.

Если вы просмотрите содержимое жесткого диска, то легко найдете оба каталога — каталог старой версии проекта CvsProject. precvs И каталог новой версии проекта CvsProject. В каталоге CvsProject Будет находиться набор каталогов под общим именем CVS. В НИХ Содержатся файлы с именами Entries, Reposxtory И Root. Не удаляйте никаких файлов, поскольку они важны для поддержания вашего проекта и его соединения с системой CVS.

Если вы откроете каталог, который был выбран в качестве каталога репозитория, то обнаружите файлы проекта, хранящиеся в виде текста в наборе каталогов, кото­рые зеркально повторяют структуру каталогов вашего проекта. При необходимости удаления каталога из репозитория один из наиболее простых способов состоит в физическом удалении каталога из репозитория.

Добавление приложения

примечаниеДавайте более подробно рассмотрим операции, необходимые для добавления в проект приложения. Выберите в меню File ∣ New и затем на странице General по­явившегося диалогового окна Object Gallery выберите Application. Щелкните на кноп­ке OK. После появления на экране окна мастера Application Wizard примите все на­стройки по умолчанию и щелкните на кнопке Finish JBuilder создаст приложение и поместит его в ваш проект.

Порядок создания проекта и записи его в репозиторий не имеет значе­ния. Если вы работаете над крупным проектом, с которым уже возитесь несколько меся­цев, то его можно записать в репозиторий в любой момент и с помощью любых спосо­Бов, описанных в последнем разделе этой главы.

Несмотря на то что приложение добавлено в проект, оно не внесено в CVS-peπo- зиторий. Выполните щелчок правой кнопкой мыши на файле Applicationljava, и в контекстном меню выберите пункт CVS ∣ Status for Applicationljava… (CVS | Состоя­ние Applicationljava…). На экране появится диалоговое окно с сообщением "This file is not currently under CVS." ("Этот файл в настоящее время не находится под управле­нием системы CVS."). Выполните щелчок правой кнопкой мыши на файле Frameljava и выберите CVS ∣ Status for Frameljava…. Вы получите тот же результат. Щелкните на файле Applicationljava, нажмите клавишу Shift и щелкните на файле Frameljava. Выделятся оба файла. Выполните щелчок правой кнопкой мыши, и в контекстном меню выберите CVS ∣ Add Files… (CVS | Добавить файлы…). Появится диалоговое окно, которое позволит добавить комментарий. Наберите Added Frameljava and Applicationljava (Добавленные Frameljava и Appiicationljava), как показано на рис 26.8. (Текст можно и не заключать в угловые скобки.)

После щелчка на кнопке OK среда JBuilder добавит выбранные файлы в CVS-pe- позиторий и выведет на экран подтверждающее сообщение.

525

Браузер состояния

А теперь давайте внесем несколько изменений в каждый из файлов, только что добавленных в репозиторий. Перейдите в режим разработки и создайте кнопку. Это вызовет изменения кода в файле Framel. java. Выберите файл Applicationl .java в па­нели проекта, перейдите в режим редактирования кода и добавьте следующий опе­ратор import:

Import j ava. math.*;

Независимо от того, какие изменения вы вносите — достаточно будет даже не­значительного изменения — JBuilder обнаружит изменения. Чтобы сделать нашу за­дачу еще более интересной, создадим в проекте два класса. Выберите в меню File | New Class и щелкните на кнопке OK. Повторите этот процесс еще раз. В проекте появится два новых класса с именами Untitledl. java И Untitled2. java. Для со­хранения изменений выберите в меню File ∣ Save АН.

*i p,• <added franel.java and applicationl.java> > s
∙< ⅛s 5i ∙a∙
: i h
,⅜,ok i cancel i help ∣
рис. 26.8. добавление комментария во время добавления файлов
 ~⅞ ∙.⅞Φ>.r' ⅛ 
cpplicationl.java
fra‰el. java . ⅜ ,
• - . i ⅛ 
 ■ ∙. ,. ^r

Выберите в меню Team ∣ Status Browser (Команда | Браузер состояния) и перейди­те на страницу Changes (Изменения). Браузер состояния Status Browser должен выг­лядеть так, как показано на рис. 26.9.

A CVS Add and Commitwill be performed on the following files;.

. 4»,^.. . . Г У "⅝ V /ɜ . ^ .- . . .,.V. ,

3 GWWCT

J Statue

FIleName ∣

⅛ CvsProject

¾Changed in workspace

IAcplicatlDnI java

I

⅜ Changed Inworicspace

Framel java_____________ j

I

95 Not in repository

⅛ M9*J∏ .reposttoŋf

IUntitIedl java iUntHled2Java __

Рис. 26.9. Окно браузера

I

Состояния

Status Browser

×ι

CtanyeajFlte Include Uste∣

J ⅛‰ ‘√j’.¾∙ ‘¾ιy~7 —

It

Ii

■Ldk

C⅛t,,F⅛,rf’ J l^’.l ),. j ~" C v> ‘ t. ij, ‘∙f C”’ j

примечаниеБраузер состояния предупреждает вас о том, что файлы Appiicationi. java и Framel. java были изменены. Кроме того, он указывает, что файлы Untitledl. java и Untitled2. java не внесены в репозиторий. Для закрытия браузера состояния щелкните на кнопке OK.

Для немодифицированного проекта окно браузера состояния будет со­вершенно пустым. Это может сбивать с толку, поскольку вы можете ошибочно решить, что JBuiIder ничего не говорит о состоянии проекта. Очевидное решение — внести незна­чительные изменения в один из файлов проекта и снова открыть браузер состояния. В Этом случае его окно уж точно должно содержать данные.

Назначение браузера состояния заключается в возможности проверки состояния проекта в репозитории без внесения изменений. Ниже в этой главе будет показано, что браузер состояния можно применять для указания системе CVS игнорировать отдельные файлы, которые вы не хотите вносить в репозиторий.

Браузер фиксации

Выберите в меню Team ∣ Commit Browser (Команда | Браузер фиксации). На стра­нице Commits вы увидите имена всех файлов, которые были изменены или добавле­ны, состояние файлов и рекомендуемые действия, как показано на рис. 26 10.

Для фиксации изменений, внесенных в два файла, которые были ранее добавле­ны в репозиторий (Applicationl. java И Framel. java), И Добавления в репозито­рий отсутствующих в нем файлов (Untitledl. java И Untitled2. java) Все, что не­обходимо сделать — так это щелкнуть на кнопке Commit (Фиксация). При необходи­мости добавления комментариев, описывающих изменения, перед щелчком на кнопке Commit, перейдите в браузере фиксации на страницу Summary Comment (Ре­зюмирующий комментарий) и введите комментарий. После фиксации изменений JBuilder выведет на экран диалоговое окно Version Control Operations (Операции по

Cuinmit Browser

To commit all changes press the" Com m(Γ button. To disregard a file, select the "No action" Item ttbm tie ɑropdown Iisi In the first column Use the file entry⅛ eoπterf-menu to perform Its action Immediately.

ft] gcvsproject fiielnciudeustsj
’ action j statust i file name 
j commit _ zj*⅛ changedjn worksoace adohcationi java 
commit ^ -ifr¾ changed in workspace if rame1 java 
add jj⅛⅜ notin repository μjntitled1 ∣ava 
-d -3¾ notinrepositoiy Γ0ntitied2 lava
рис. 26.10.
окно
браузера
фиксации

Управлению версиями), в котором перечисляются все операции, выполненные при фиксации изменений, и которое подтверждает, что операция фиксации была вы­полнена успешно.

Иногда действия, предлагаемые JBuilder по умолчанию для конкретного файла, не соответствуют тому, что вы хотите сделать. Комбинированные списки в столбце Action (Действие) окна Commit Browser предлагают дополнительные опции (см. рис. 26.11). Для любого из файлов можно выбрать операцию No (Нет), которая приведет к тому, что состояние файла изменяться не будет. Кроме того, вы имеете возмож­ность выбрать операцию Revert (Вернуться) для двух файлов, которые уже находятся в CVS-репозитории. Операция Revert считывает в проект последние версии файлов. Для данного проекта использование операции Revert означает, что в проект будут считаны первоначальная версия файла Applicationl. java, Не содержащая опера­тор Import, И первоначальная версия файла Framei. java, Не содержащая кнопку.

В некоторых случаях в браузере фиксации будут присутствовать элементы, кото­рые не исчезают даже после фиксации изменений. В частности, иногда можно уви­деть файл, который одновременно требуется и зафиксировать, и обновить. Этот файл будет содержаться в списке дважды: один раз для фиксации и один раз для об­новления. Это, как правило, означает, что в вашей локальной системе присутствует ненужный файл. В большинстве случаев при удалении такого файла проблема исче­зает. Тем не менее, перед его удалением рекомендуется сделать резервную копию в каталоге временных файлов, а затем удалить файл и провести обновление. Если об­новление будет выполнено без ошибок, копию файла можно удалить из каталога временных файлов или оставить его до тех пор, пока другой процесс не удалит его.

Более подробно об использовании браузера состояния

Как уже бвло показано, браузер состояния можно использовать для определения текущего состояния файлов проекта.

Corhmlts I Summary Comment 1 File Indude Usts

HI айда

⅜c⅛on Btatus *~i i File Name

Э CvsProject

I

Commit I

6 h Chan Jedlnworkspace ∕ , Ij

Changed in worκεpace Framet ava

Revert

No action

<⅝ Not in repository Jntitledl java ____ J

æ Nntln reposltoιγ Unfitledijava ___________

Individual Commiem j workspace Source Reposttofy Source j workspace Diff J

P Use summa, cvmι..ent

TZ-> … -⅞—-. ÷.y ⅜………………………………. λ..λ∕Λλ.Λ ,,…I ʌ. χιf⅞……… ‘ i…………. ⅛x.⅛Λ-.-.’. ⅛.∙S.-.’-.* √⅛ ⅛M⅛-∙—∙∙ — ∣r⅛lr∣i⅛⅞∣mιπι7f " *

Рис. 26.11.

Комбиниро­ванные списки предлагают дополнитель­ные опции

□ Commit Browser

То commit ell changes press the "Comm∣r button. To disregard a tile, select the *No action’ Mem from the dropdown list in the first column Use the file entry’s corrtaxt-mehu to perform its action immediately

Commn

1 Cancisl I

Часто при открытии браузера состояния можно увидеть, что в списке файлов на добавление в CVS-репозиторий находится много файлов, которые вносить в репози­торий не требуется. Добиться желаемого результата очень просто. Перейдите на зак­ладку File Include Lists (Списки включения для файлов) и выберите либо Team Include List (Список включения команды) или Personal Include List (Персональный список включения), в зависимости от того, хотите ли вы сделать настройки для всей группы разработчиков или только для себя. Найдите каталог или пакет, где находятся фай­лы, которые вы хотите включить или исключить из списка. Вернитесь на страницу Changes. Вы увидите, что элементы из списка, которые вы хотели исключить или включить, были удалены или включены в список изменений Changes.

При исключении файлов из списка запустите режим командной строки и перей­дите в каталог, в котором вы исключали файлы. Обратите внимание, что в каталоге исключенных файлов появился файл .cvsignorβ. Это простой текстовый файл, со­держащий список файлов или каталогов из текущего каталога, которые будут игно­рироваться системой CVS. Содержимое этого файла можно редактировать вручную, и среда JBuilder отразит все внесенные изменения. Тем не менее, в большинстве случаев файл .cvsignore Удобнее редактировать с помощью средств командной разработки JBuilder.

примечаниеСреда JBuilder обеспечивает два уровня игнорирования файлов. Существуют файлы, которые, как упоминалось в предыдущем абзаце, будут игнорироваться только для вас, и файлы, которые будут игнорироваться для всех разработчиков, вхо­дящих в систему CVS. Я полагаю, что имена локальных игнорируемых файлов хра­нятся в файле. jpx. local проекта.

При работе с браузером состояния нет необходимости фиксации или обновления файлов для изменения содержимого файла. cvsignore. Для записи изме­нений в файл. Cvsignore и репозиторий достаточно простого переключения между Страницами File Include Lists и Changes.

В нижней части страницы Changes браузера состояния находится несколько закладок. Эти закладки можно использовать для просмотра текущего состояния файла в проекте и в репозитории. Кроме того, имеются закладки, которые позволя­ют просмотреть различия между двумя версиями одного и того же файла. Просмотр различий между версиями одного и того же файла более подробно рассматривается ниже в этой главе.

Когда вы научитесь работать с браузером состояния, то сможете очень быстро взять под свой контроль даже самые большие проекты. Например, я храню все про­екты примеров данной книги в виде одного пункта репозитория. Под этим пунктом находится очень развесистое дерево, тем не менее, и система CVS, и средства коман­дной разработки JBuilder совершенно спокойно работают с таким большим количе­ством файлов.

Удаление файла

Для удаления файла из проекта выполните двойной щелчок на имени файла в панели проекта. Например, выполните двойной щелчок на файле Untitledljava. За-

примечаниеТем выберите в меню Team ∣ Remove Untitledljava. Вы получите возможность запи­сать какой-то комментарий. Примите значение, используемое по умолчанию, т. е. <No comment entered> (<Heτ комментария»), и щелкните на кнопке OK. Должно быть выдано сообщение, уведомляющее об удалении файла как из рабочего про­странства, так и из репозитория.

Если файл Untitledl. java не был добавлен в репозиторий с помо­щью браузера фиксации, по двойному щелчку на его имени вы не получите доступ к опции удаления. Тем не менее, среди пунктов меню Team присутствует Add Untitledljava (Добавить Untitledljava).

Метки версий

В меню Team имеется опция для добавления в проект метки версии. В системе CVB это называется обозначением сборки проекта.

Назначение метки версии состоит в организации метки, которая обозначает оп­ределенный этап процесса разработки проекта. В дальнейшем проект можно будет извлекать по метке версии, и восстанавливать точное состояние, которое он имел перед определением метки.

Наиболее очевидное использование метки версии — указание, что проект доб — рался-таки до версии 1.0 или даже 2.0. Тем не менее, метки версий могут содержать даты, например, version_august_24_2003. В результате вы получаете возможность восстанавливать проект по состоянию на определенную дату.

Существует два способа извлечения определенной версии из системы CVS. Оба они предполагают работу в режиме командной строки, поэтому рассматриваются далее в этой главе.

Считывание и обновление проекта

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

В главном меню среды JBuilder выберите пункт Window ∣ New Browser (Окно | Но­вый браузер). После открытия окна нового браузера выберите в меню File ∣ Close Projects (Файл | Закрыть проекты), что приведет к закрытию всех открытых проектов. После этого выберите в меню File ∣ New, в результате чего откроется диалоговое окно Object Gallery, а затем перейдите в нем на страницу Project (Проект), которая показа­но на рис. 26.12. На странице Project щелкните на кнопке Pull Project from CVS (Взять проект из CVS), а затем и на кнопке OK.

На экране появится окно мастера Pull Project from CVS (мастер взятия проекта из CVS). На шаге I этого мастера должен быть установлен каталог, в котором будет раз­мещена копия проекта (см. рис. 26.13). Единственное, что нужно помнйть при вы­боре каталога — на этом этапе он должен быть пустым. В большинстве случаев структуру каталогов потребуется согласовать между участниками проекта. В приве­денном примере будет использоваться каталог с именем MyDirβctory. Перейдите в каталог, в котором вы хотите сохранить копию проекта, и щелкните на кнопке Next.

На шаге 2 мастера в качестве типа соединения выберите Local (см. рис. 26.14) и щелкните на кнопке Next.

На следующем шаге, который показан на рис. 26.15, оставьте значения, исполь­зуемые по умолчанию, без изменений. Эти значения идентифицируют проект CvsProject И путь к созданному вами каталогу. Если требуемый проект не отобра­жается, вы можете перейти в репозиторий и ввести имя проекта (в нашем случае это CvsProject). Кроме того, проект можно выбрать из комбинированного списка Module Name (Имя модуля). Вас, может быть, заинтересует опция Show console messages (Показать консольные сообщения), особенно если вы уже знакомы с системой CVS.

После щелчка на кнопке Finish среда JBuilder уведомит, успешно ли прочитан проект из репозитория (см. рис. 26.16).

На этот момент у вас будут активны две копии проекта. Посмотрите на информа­цию о путях в верхней части проекта, и вы увидите, что проекты находятся в разных каталогах.

project prpject for рой project from pufl projecifrom puiiprojectfrom
existirg cvs vs8 ctearcase

Рис. 26.12. Страница Project c°oe

Галереи объектов

.⅛.u…⅛…………. ⅞,,,⅜,,⅞ta⅜⅛⅜⅛;…………. ,y,

⅜⅜a⅛⅝a⅛>⅛⅛

………….. —————- ~-‘———— L

ɪl

Cancel I

HeiP I

"*∙⅛∙⅞.

рис. 26.13. шаг 1
мастера взятия проекта из cvs
ζj√ pull project from cvs - step t of 3,sefectemptytarem orectory,targetdirectory. ∣g atempvnydirectoiy

Specify either an empty directory or a new directory to be used as the target location to deliver a module from a CVS repository;

Рис. 26.14. Шаг 2

Мастера взятия проекта из CVS

CVS ⅛kκlute Propertiea

BpecifytheConrtecBon VaSfee to connect юв» CVB repository. AteteSsetBne mean? yourft⅛⅛ystentW⅞set⅛er sn<reχr are uββd Xdrpa were ButeenBcafedseiveranQeecureitfKrtifSSH) ⅛pβ⅛<rf⅛onnedtat f,∙ ‘XfdhnsetMpe-ɪ-j * -*—∙ I

LCVSROQT=1oca<∙-(fepo8ttor⅞~

∖⅛. ʃ. I⅛ .λλ : I’ ∕^κ

∣(? Pull Prθ}ecl from CVS — Step 2 oi 3

⅛UMJwaBBJφfφ,ι⅜

Рис. 26.15. ZZMa J Мастера взятия проекта из CVS

F⅛B08ttQrfPath IortempfrBpiisitoiy ^" ^⅛¾ ~ 1

Module name: εvsProEct " ~ ^ ‘⅜⅛j i

Brancti J<main* Jj

©pitons ∙ ^ .. m’……. —■■■—……….

P AutGsBviifitesteforBCVSepefattons

Γ Show sonsote messages

Checking Out CVS Project

Resutts from checking Outths project frameVS are oetew.

Рис. 26.16. Проект успешно прочитан из репозитория

U ITiyDirectoryfcvstgnore

U InyDirectoiyfcvsProjectipx

U InyDirectoiyfsrcfcvsprojectfAppIicationl. java U InyDirectoryfsrcfcvsprojectfFraineI java UmyDirectoiyfsrcfcvsprojectfUntitIedSjava U InyDirectoryfsrcfcvsprojectfUntitIedrtjava CVS project checkout Coiiipteteit

532

В новой версии проекта в файле Framel. java В режиме конструирования добавь­те кнопку, а в файл Applicationl. java Поместите следующий оператор import:

Import java. io.*;

Сохраните внесенные изменения и выберите в меню пункт Team ∣ Commit Browser. Зафиксируйте изменения в репозитории, выполнив щелчок на кнопке Commit. (Если у вас возникли вопросы по этому шагу, еще раз просмотрите пример, приведенный в разделе, посвященном браузеру фиксации.)

Перейдите к другой открытой копии проекта. В ней не будут присутствовать из­менения, внесенные вами в первой копии. Выберите в меню Team ∣ Update Project (Команда | Обновить проект). JBuilder выведет сообщение, предупреждающее о том, что проект будет обновлен из репозитория (см. рис. 26.17).

Щелкните на кнопке OK. На экране появятся дополнительные сообщения, пос­леднее из которых гласит о том, что обновление было выполнено успешно (см. рис. 26.18).

Уделите некоторое время на сравнение двух копий проекта. Они полностью идентичны и соответствуют файлам, хранящимся в репозитории.

примечаниеДля обновления проекта можно воспользоваться браузером фиксации. Если вы выберите этот способ, выпадающий список, показанный на рис. 26.11, позволит вам обновить файлы или же не выполнять никаких операций.

Наверное, одним из наиболее важных моментов при использовании си­стемы CVS Является обновление проекта перед началом работы над ним. Поступая та­ким образом, вы вносите в проект любые изменения, которые могли иметь место до это­го момента. Возьмите себе в привычку перед выполнением любых других операций обновлять проект, и вы существенно упростите себе жизнь. Кроме того, обновление же­лательно производить перед фиксацией изменений. В результате вы избегаете ситуа­ций, при которых возникают конфликты между вашей версией программного продукта И версией, хранящейся в репозитории.

рис. 26.17. окно предупреждения о предстоящем обновлении о) update project в 2<j

cvs update operation successftilly completed

Рис. 26.18. Окно уведомления о завершении обновления

Разрешение конфликтов

В следующем разделе главы мы сначала создадим конфликтную ситуацию, а за­тем с помощью средств JBuiIder разрешим ее. Начнем с первой копии созданного нами проекта. Предположим, что эта копия была считана разработчиком по имени Джейн. В файле Applicationi. java в редакторе кода поместите курсор на строку, находящуюся непосредственно после строки с оператором package, и введите:

// У Мери был ягненок

Сохраните изменения, но не фиксируйте их в репозитории. Таким образом, Джейн внесла изменения в файл, но не изменила соответствующий файл в репози­тории.

А теперь предположим, что другой разработчик, Боб, прочитал копию проекта из системы CVS. В копии, которую мы прочитали из системы CVS, откройте файл Applicationl. java, поместите курсор в строку, находящуюся непосредственно после строки с оператором package, и введите:

// Его (ягненка) шерсть была белой, как снег

Опять-таки, сохраните изменения. Теперь мы попали в ситуацию, когда Джейн и Боб изменили в файле одну и ту же строку, но никто из них не изменил содержимое файла в репозитории. (Только, пожалуйста, не спрашивайте меня, почему Джейн и Боб добавляют в код проекта комментарии подобного рода…)

В копии проекта, считанной из системы CVS, выберите в меню Team ∣ Commit Browser и зафиксируйте изменения. Процесс фиксации пройдет без ошибок. Те­перь файл в репозитории будет содержать строку "// Его (ягненка) шерсть была белой, как снег". Эта ситуация имитирует фиксацию изменений Бобом. Тем време­нем, Джейн, ничего не подозревая, продолжает трудиться над своей версией файла.

В первоначальной копии файла выберите в меню Team, Update Project. JBuilder выведет сообщение, показанное на рис. 26.19, которое гласит о наличии конфлик­тов. На данный момент Джейн просто обновила свои файлы и обнаружила, что копия файла Applicationl. java В репозитории не соответствует ее собственной копии того же файла. Причина конфликта будет указана в редакторе кода (см. рис. 26.20).

Для разрешения конфликта можно воспользоваться небольшими закладками, но сначала хотелось бы рассказать о нескольких интересных особенностях браузера со­стояния.

Для вызова браузера состояния выберите в меню Team ∣ Status Browser. В поле Status (Состояние), как показано в верхней правой части рисунка 26.21, в качестве состояния выводится Has conflicts (Имеются конфликты). Щелкните на файле

cvs update completed successfully. one or more merjje conflicts found.ʃ) Update Project

Рис. 26.19. Окно уведомления о наличии конфликта

Applicationljava в поле File Name (Имя файла) браузера состояния. Закладки файлов в средней части браузера более не будут недоступными. Эти закладки предоставля­ют средства, необходимые для локализации конфликта и обнаружения отличий в различных версиях файлов. Для просмотра файла нужно расширить пространство под закладками. Для этого поместите указатель мыши на границу между закладками файлов и верхней частью браузера. Когда указатель примет форму двунаправленной стрелки, нажмите левую кнопку мыши и перетащите границу вверх.

примечание
браузер фиксации имеет аналогичный интерфейс для разрешения кон-
фликтов.

Ha закладке Workspace Source (Исходный файл в рабочей области) отображается текущая локальная версия файла, включая несохраненные изменения. Закладка Repository Source (Исходный файл в репозитории) показывает версию файла, которая находится в репозитории. На закладке Repository Diff (Отличия файла в репозитории) отображаются изменения, внесенные в файл в репозитории после того, как была прочитана копия файла из репозитория. Если другой разработчик внес изменения в файл после того, как вы прочитали его из репозитория, на закладке Repository Diff эти изменения будут выделены. На закладке Repository Diff производится сравнение считанной версии файла с текущей версией. На закладке Complete Diff (Общие отли­чия) отображаются различия между последней текущей локальной версией и после­дней версией из репозитория. На ней находится наиболее полная информация, ка­сающаяся конфликтов слияния. Как показано на рис. 26 21, на закладке Complete Diff содержатся изменения в локальной копии, которыми в нашем случае является строка"// У Мери был ягненок", И в копии из репозитория (строка "// Его (яг­ненка) шерсть была белой, как снег").

рис. 26.20.
jbuilder объясняет конфликт в панели редактора
авзщ,fbe eeit search view project run team wttares too» window help,qtf s∕ii и ∙ φ *
m,'x⅛; ⅛ r⅛ irɪ*
. 'x⅛∖j⅛? _ _ ʃ' ⅛ . , . 4
¾⅛wttffs spcvsprolecv * *
⅜⅛,⅛-. .. ” ⅛⅛ . . .. .! p'-
jp cvsproject jpx s3 <f cver'r")e,t
,x ' ∣⅛ <jntrtlβd3∣ x ‘ft unwedm ∣,package cvsproject;
/»* baerge workspace: chanpee in the borkspace »/
//bary had a iittie .iamb,
/', bbetfe repository: changes ⅛ob the repository //its cleece was vhite as snow
,ft frameljava ft untltled3.java (ft untitled4.java,java, io.*; java.bath.*; j avax.swing.uibanager. java, awt.*;,v gtt merge conflicts æ fe imports i⅛ 9 appilcationl
applicationlo ⅜ main(δtringθ args) pacmrrame 
,»,source j design j b⅝⅛m p >mt j oocj history,×,cv8pro∣ect updates f*,juuilder g(∕java∕src∣avartenφ∕cvspro∣ect∕sr(/cvsprojectzappbtationt.java,⅝pp∣icationt java
закройте браузер состояния и вернитесь в редактор кода, в котором, как можно видеть на рис. 26 22, выделены конфликты слияния. обратите внимание на небольшие кнопки слева в окне редактора кода. при выборе любой из них на экране появится сообщение. одним из сообщений будет keep workspace changes (сохранить изменения в рабочем пространстве), а вторым — keep repository changes (сохранить изменения в репозитории). для разрешения конфликта выберите одно из сообщений.,3p cvsprojectjpx
j φ ⅛f, cvsproject 1 ∣ <⅛ applicationl java i j <& frameljava <⅛ untitledl java
,я fro» the repository
Γj√status browser
changes t ∏∣e include liats}
i file name
i cvsproject
vvortcspacesourcbj repository sourt∣ ' v.orkspacp diffj rupos∣tn∣⅛ dttf package cvsproject;
⅛m** бмегде workspace: changes in the workspace * i ⅛∕∕mary had a little iaab
∣⅛ /»* 6aerge repository: changes croa the repository
//its fleece was white as snow
rɪɪport j avax. swing.uihanager;
 '∙jftl'.....m.. j-ɪa-. _ ` ⅛si ^*'∙⅝⅛∣⅝ -j1 ,' ■
piffftqm t 2 to f∣∣e j z difference blocks found.
рис. 26.21. страница complete diff
⅛ i ∕ "∙v∙ ` —
, <*1 ∏⅜⅛> j
-iaixt
file edit search view pft⅞⅛t gun team wizards tools vflndow help fe
d & <5 * to в *>^ ь ⅝⅛i⅞ ∣⅛f"~
⅛⅛ * ,∣r½l ✓ - ⅛fr ∙ > 'd.t3 * to ьз ÷sι зз-
package cvsproject; *
∙****i:
,jj jbuiider - gzaempzmydirectoryzsrc∕cvsprβ>ect∕appiicafctont4а?а,¾ s l¾l merge conflicts ∣ s ⅛j imports ih ⅜ applicationl i - applicationio
⅜ main(stringj] args) ∣ ⅜ packframe
,//its cleece was white as snow */
irqport java.io.*; inŋort java.aath.*;
i ⅝⅜ 1
рис. 26.22.
ликвидация конфликта путем выбора
соответствующего
сообщения

gf File "SrczcvsprojectlAppIicationI java" updated with a conflict.

J⅛ ‘Appikaiivnl ia√s": Meros Confiiitsi ime?

XApplicatIonli

Xj CVS Project Updates I

Ffl⅝w , …… ʌ. —

Pub∣∣C class

¾⅝⅝⅞∙¾~∙⅞—————

ɪ √ ■ ∙ ∙∙ «Д -‘

При желании вы можете определить источник конфликта в панели сообщений и разрешить конфликты вручную. Тем не менее, лично я предпочитаю несколько дру­гой подход. Для перехода на конфликтную строку я выполняю двойной щелчок на сообщении в панели сообщений. В левой части исходного кода появятся неболь­шие кнопки. Эти кнопки частично видны на рис. 26.22 под диалоговым окном. Одна из кнопок вызывает на экран диалоговое окно, позволяющее для разрешения конфликта воспользоваться исходным кодом из репозитория. Вторая кнопка вызы­вает на экран диалоговое окно, приведенное на рис. 26.22, которое позволяет сохра­нить изменения, внесенные в рабочую область. Для разрешения конфликта вос­пользуйтесь одним из диалоговых окон. После этого зафиксируйте изменения в ре­позитории. Теперь вы можете сообщить по телефону другим разработчикам, участвующим в проекте, о том, что им потребуется обновить проект.

Использование системы CVS в редакциях JBuiIder

Personal и JBuiIder SE

Те из вас, кто пользуется JBuiIder Personal, могут работать с системой CVS в режи­ме командной строки или с использованием нескольких графических интерфейсов пользователя, которые были разработаны для CVS. Система CVS представляет собой проект с открытым кодом, поэтому большинство клиентских графических интер­фейсов пользователя для нее распространяются совершенно бесплатно.

Основная информация и ресурсы

Если вам нужна система CVS, она доступна для выгрузки в Internet. Адрес домаш­него сайта системы CVS Http://cvshome. org/. Если вы работаете под управлени­ем операционной системы Linux, соответствующую версию системы CVS можно найти ПО Адресу Http://cvshome. org/dev/codelinux. html. CVS ВХОДИТ В Состав большинства дистрибутивов Linux. Для платформы Windows соответствующую Версию СИСТеМЫ CVS МОЖНО НаЙТИ ПО адресу Http://cvshome. org/dev/ codewindows. html. Для платформы Мае несколько версий клиентов системы CVS находятся на Web-сайте Http://www. loria. fr/cgi-bin/molli/wilma. cgi/rel. Кроме того, этот сайт исключительно удобен для поиска других средств CVS.

Процесс установки системы CVS может существенно отличаться от платформы к платформе, на которой производится установка. На большинстве Linux-машин ко­пия системы CVS уже установлена. Версия системы CVS для платформы Windows со­держит всего один выполняемый файл — Cvs. e×e. Как правило, при организации локальной сети в качестве сервера используется Linux-машина, а в качестве клиент­ских рабочих станций — машины на базе Windows или Linux. Для соединения с сер­вером, диск которого будет открыт для использования всеми машинами сети, мож­но воспользоваться NFS или SAMBA. Тем не менее, в большинстве случаев будет ис­пользоваться PServer, подробное описание применения которого можно найти далее в главе. На машине каждого пользователя будет установлена копия системы CVS. На сегодняшний день версии системы CVS для Windows не могут использо­ваться в качестве серверов.

Если система CVS применяется для синхронизации содержимого двух машин, в качестве промежуточного звена между ними можно использовать третью машину. На третьей машине будет находиться репозиторий. Кроме того, одна и та же маши­на может одновременно быть сервером системы CVS и машиной, на которой выпол­няется разработка.

Интерфейсные средства

Интерфейсные средства для операционной системы Windows включают:

■ TKCVS: Http://cvshome. org/dev/addontkcvs. html

■ JCVS: Http://cvshome. org/dev/addonjcvs. html

■ WinCVS: Http://cvshome. org/dev/addonmaccvs. html

Я очень хорошо знаю TKCVS и могу с уверенностью сказать, что она существенно упрощает работу с системой CVS. Она требует для своей работы последних версий tcl, однако следует учесть, что, например, стандартная инсталляция Red Hat Linux включает все, что необходимо.

Несмотря на то что с точки зрения Windows утилиту TKCVS нельзя назвать слож­ным приложением, тем не менее, она обладает возможностями, которые окажутся полезными для большинства разработчиков. В частности, она позволяет изучить все опции CVS. Более того, утилита TKCVS позволяет выполнять эксперименты с различными опциями.

В тех случаях, когда утилита TKCVS не сможет вам помочь, вы всегда можете пе­рейти в режим командной строки и запускать старые добрые команды. Фактически вы имеете возможность произвольным образом совместно использовать графичес­кий интерфейс пользователя и командную строку. Таким образом, вы можете взять все самое лучшее из двух подходов: возможность написания сценариев командной строки и переходить по дереву проекта и запускать отчеты в рамках графического интерфейса приложения TKCVS. (Горькая правда заключается в том, что большую часть работы с CVS часто приходится выполнять в режиме командной строки. Она быстрее, эффективнее и проще графического интерфейса пользователя.)

В меню Options (Опции) приложения TKCVS присутствует пункт Checkout with Options (Считывание с использованием опций), который позволяет считывать ката­логи. Вы должны явно выбрать опцию Checkout with Optionsz иначе работать она не будет.

Приложение TkDiff представляет собой великолепную утилиту для сравнения двух файлов. Фактически оно предназначено для работы в рамках приложения TKCVS, однако им можно пользоваться и как отдельной утилитой.

Работа с системой CVS в режиме командной строки

В этом разделе данной главы мы рассмотрим ряд базовых команд, которые по­требуются для работы с системой CVS в режиме командной строки. Если вы начнете серьезно работать с CVS, то, по всей видимости, захотите получить доступ к офици­альному онлайновому руководству пользователя CVS, в котором содержится наибо­лее свежая информация по CVS. Руководство носит название "Version Management with CVS" ("Управление версиями с помощью CVS"), но в широких кругах разработ­чиков оно известно как "the Cederqvist", по имени своего первого автора Пера Ce — дерквиста (Per Cederqvist). Руководство можно доступно Internet по адресу http:// Www. cvshome. org/docs/inanuai. Кроме того, в качестве руководства по работе с сис­темой CVS я настоятельно рекомендую книгу Open Source Development with CVS (Раз­работка открытого кода с использованием CVS) Карла Фогеля (Karl Fogel), выпущен­ную издательством Coriolis Group. Карл Фогель написал великолепную книгу — ин­формативную и интересную.

Вы, наверное, обратили внимание, что команды системы CVS имеют следующий вид:

Cvs command

Они всегда начинаются с префикса cvs, за которым следует информация, необ­ходимая для выполнения требуемой операции (т. е. команды).

Инициализация репозитория системы CVS для сервера PServer

В этом разделе мы коротко остановимся на настройках версии системы CVS для Linux, которые позволят использовать CVS вместе с PServer. Хоть это и не подробное описание, тем не менее, я надеюсь, что приведенного материала окажется достаточ­но для выполнения тех операций, которые плохо описаны в общедоступной доку­ментации.

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

Eve — d ∕usr∕local∕cvsrep Init

Префикс Cvs является обязательной частью синтаксиса системы CVS. Ключ — d представляет собой сокращение от слова Directory (каталог), который в приведен­ном примере указывает на расположение репозитория, a ∕usr∕local∕cvsrep Это собственно имя каталога, где находится репозиторий.

Убедитесь, что каталог /etc/services Содержит:

Cvspserver 2401/tcp

Добавьте код, приведенный в листинге 26.1, в файл cvs, который расположен в каталоге ∕etc∕χinetd. d. Таким образом, полный путь к файлу cvs выглядит следу­ющим образом: ∕etc∕xinetd. d∕cvs.

Листинг 26.1. Небольшой файл Cvs, Находящийся в каталоге Xinetd. d

Service Cvspserver

{

Disable = no

Socket_type = stream

Protocol = tcp

Wait = no

User = root

Server = ∕usr∕bin∕cvs

Server_args = —allow-root=∕usr∕local∕cvsrep — f pserver

1

После добавления файла перезагрузите машину или повторно инициализируйте xinetd. xinetd находится в каталоге ∕etc∕init. d. Его можно перезапустить или перегрузить:

∕etc∕init. d∕xinetd restart

Если при попытке доступа к системе CVS вы получите сообщение об ошибке "can’t chdir…" (невозможно перейти в каталог…), Проблема Связана C тем, ЧТО при вызове xinetd не задан ключ — f:

Server_args = — allow-root=∕usr∕local∕cvsrep — f psβrver

Регистрация на сервере PServer системы CVS

А теперь давайте поговорим о регистрации на сервере из удаленной машины. Для инициализации системы CVS можно подготовить пакетный файл. Ниже приве­ден листинг пакетного файла, который лично я выполнял перед получением досту­па к проекту:

βecho off

Set HOME=G:UtilsCvsPassFilesBree set HOMEPATH=UtilsCvsPassFilesBree set Homedrive=g:

Set USER=Charlie

Set CVSROOt=:pserver:CharlieQMyServer:∕usr∕local∕cvsrβp

Переменные среды home и homepath указывают на место, где система CVS хранит данные о соединениях, например, зашифрованные версии паролей. Приведенный код был помещен в пакетный файл, который выполняется автоматически при реги­страции на машине, на которой осуществляется разработка проекта.

Вам, возможно, во время загрузки придется регистрироваться на CVS-сервере. В этом случае выполните следующую команду:

Eve — d :pserver:UserNamegServer:∕usr∕local∕cvsrep login

Вы должны получить приглашение на ввод пароля. Если аутентификация прохо­дит успешно, приведенная выше команда комментариев не возвращает. Стандарт­ный стиль операционной системы UNIX не требует вывода сообщения в случае ус­пешного выполнения операции. Вы просто вновь попадаете в режим командной строки. Если все же вы получили сообщение, возможно, что-то было выполнено не­правильно.

В приведенной выше команде — d является сокращением от directory (каталог). В этом контексте мы работаем с репозиторием. Если бы репозиторий находился на локальном компьютере, достаточно было бы выполнить следующую команду:

Cvs — d ∕usr∕local∕cvsrep

Создание CVS-πpoeκτa

Создание CVS-πpoeκτa состоит в импортировании файлов в репозиторий. Перед помещением проекта в репозиторий убедитесь, что проект не содержит ненужных файлов и каталогов, поскольку система CVS импортирует в репозиторий все дерево каталогов. Для импортирования дерева каталогов используется следующая команда:

Cvs import — m "initial import into cvs" cacheguide charlie start

Слово import указывает, что проект импортируется в репозиторий. Ключ В команде говорит о том, что после ключа пойдет короткое сообщение. В нашем слу­чае сообщение выглядит следующим образом: "initial import into CVS" ("пер­воначальное импортирование в систему Cvs"). Следующий аргумент команды, cachegυide, представляет собой имя проекта. За именем проекта следуют две мет­ки: метка производителя и метка версии. Эти метки помогают отслеживать проекты независимых разработчиков. Вообще говоря, они не важны для процесса импорти­рования, и в их качестве можно использовать имя пользователя и слово start. О метке версии мы уже говорили, когда рассматривали процесс разработки с обозна­чением версий.

Если в репозиторий добавляется новый проект, вы должны прекратить работу в каталоге, который только что был импортирован Необходимо переименовать каталог и выйти их него, как будет описано в следующем разделе. Например, если код хранился в каталоге MyProject, его необходимо переименовать на MyProject. precvs. Затем, когда вы выйдете из проекта, он автоматически будет по­мещен В каталог MyProject.

Выход из проекта в системе CVS

Для считывания проекта из системы CVS используется следующая команда: cvs checkout MediaPlayer

примечаниеЭта команда должна запускаться из каталога, в котором находится проект. На­пример, если проект был назван MediaPiayer и расположен в каталоге c:\src, за­пуск приведенной команды в каталоге c:\src приведет к тому, что проект будет по­мещен В каталог c:\src\MediaPlayer.

F Озможно, вам придется потратить некоторое время на анализ исполь­зования строчных и прописных букв в именах фалов. Другими словами, в рамках проек­та не должно быть файлов с именами MYFILE. JAVA, Myfile. java Или MYFILE. java. >

Как правило, используется схема именования типа MyFile. java, Или же все символы в именах файлов должны быть строчными. При добавлении файлов в систему CVS Их имена следует изменять перед импортированием в репозиторий. И, как правило, при раз­работке лучше избегать использования операционной системы Windows 98, Поскольку она не всегда правильно работает с именами файлов, которые используют прописные буквы. Тем не менее, если вы все правильно настроите и прочитаете проект из репози­Тория в среде Windows 98, Никаких ошибок возникать не должно.

Фиксация изменений

Команда для фиксации изменений в репозитории выглядит следующим образом:

Cvs commit — m "Моя сегодняшняя работа"

Вы уже, наверное, узнаете формат команд системы CVS. Ключ Представляет собой флаг, указывающий, что после него содержится комментарий, как упомина­лось в разделе, посвященном созданию нового проекта. При фиксации изменений — они будут внесены в репозиторий.

Обновление

Для обновления проекта из репозитория, например, для обновления проекта на од­ной машине, если вы внесли изменения на другой, потребуется выполнить команду:

Cvs update

Для получения из репозитория новых каталогов служит следующая команда: cvs update — d

При выполнении команды cvs update — P пустые каталоги будут удалены из де­рева каталогов.

Добавление файлов

Команда для добавления файлов выглядит следующим образом: cvs add MyFile. java

Эта команда добавит файл MyFile. java в проект только после выполнения коман­ды cvs update. Для добавления бинарного файла выполните следующую команду:

Cvs add — kb MyPicture. png

Удаление файлое

Для удаления файла из репозитория сначала удалите соответствующий файл из жесткого диска, а затем выполните следующую команду:

Cvs remove MyFile. java

Резервные копии удаленного файла останутся в системе CVS, что при необходи­мости позволит восстановить удаленный файл.

Определение состояния файла

примечаниеДля определения состояния файла используется следующая команда: cvs status MyFile. java

Когда команды выглядят настолько просто, пользователи системы CVS Ча­сто забывают указывать часть Cvs Команды. Если при попытке выполнить короткую команду Случаются проблемы, убедитесь, что вы не пропустили самую важную часть команды.

Символы -kb в команде получения отчета о состоянии говорят о том, что* файл является бинарным.

Определение состояния для каталога или всего проекта

Отчет о состоянии каталога или всего проекта можно получить, если выполнить команду cvs status без параметров. Как правило, при этом вы получаете гораздо больше информации, нежели это необходимо. Для решения проблемы воспользуй­тесь следующей командой:

Cvs status > status. txt

В результате ее выполнения генерируется файл status. txt, который можно просмотреть в текстовом редакторе. В частности, внимание следует сосредоточить
на начале файла, где приводится список файлов, которые не включены в репозиторий. Если вы не хотите помещать некоторые из файлов в репозиторий, и не хотите, чтобы они отображались в отчете о состоянии, поместите их имена в файл. cvsignore, кото­рый находится в том же каталоге, что и файл, который требуется проигнорировать.

Преобразование файла в бинарный формат после его включения в репозиторий

Система CVS очень плохо работает с бинарными файлами. Фактически она со­храняет только самые последние версии, например, JPG-файлов. Если бинарный файл, скажем, изображение в формате PNG или JPG, помещается в репозиторий, и он не помечен как бинарный, У вас наверняка возникнут проблемы. В некоторых случаях бывает необходимо отметить файл как бинарный, если он еще не отмечен в репозитории как бинарный: cvs admin — kb MyFile. gif.

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

Извлечение отмеченной иерсии

Отметить версию проекта в системе CVS можно с помощью следующей команды:

Cvs tag version-1-jan-1-1956

Эту отмеченную версию проекта можно извлечь в новый пустой каталог с помо­щью следующей команды:

Cvs checkout — г version-1-jan-1-1956

Отмеченную версию проекта можно извлечь и в текущий каталог, в котором на­ходится более старая версия:

Cvs update Version-1-jan-1-1956

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

Для отметки версий в меню Team Среды JBuiIder Имеется специальная опция.

Резюме

В этой главе вы научились работать с системой управления версиями и средства­ми командной разработки в среде JBuilder. В принципе, я большой сторонник сис­темы CVS, и пользуюсь ею на протяжении многих лет. У системы CVS есть отдель­ные недостатки, тем не менее, она четко доказала свою эффективность. Честно гово­ря, я не помню ни одного случая, когда у меня возникали проблемы с CVS. Одна из замечательных возможностей системы CVS заключается в том, что весь репозиторий можно записать на компакт-диск и хранить его как резервную копию всего проекта (или проектов). Репозиторий всегда можно переписать с диска и восстановить про­екты). Правда, при копировании репозитория с компакт-диска в некоторых случа­ях приходится изменять права доступа к файлам.

Чарли Калверт

Глава 27

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *