Персональная страница Федора Езеева
Главная
Download
Ссылки
MS SQL
Обмен данными
Новости
Статьи
О себе
Крупные разделы...
Коллективная разработка
1С++, OOP, XP
FuncTest
FAQ
Структура 1cv7.md
Назад Содержание Вперед

Введение в коллективную разработку.

Репозиторий.

Здесь я ничего писать не буду. А предложу прочитать вот эту статью. Лучше, чем там я не смогу сказать. Эта статья может убедить любого программиста в том, что ему нужен репозиторий, даже если этот программист час назад не знал этого слова.

Софт.

Итак, Вы прочитали статью (не прочитали? быстро читать! я не шучу) и захотели использовать репозиторий в своей повседневной работе. Но пока не знаете, с чего начать. А начнем мы с выкачивания и установки кучи софта.

Примечание: все программы в этой таблице - бесплатны и распространяются с исходными кодами. Это принипиальная позиция.
НазваниеГде качать
(сколько весит)
Краткое описание
WinCVS http://www.wincvs.org/
(ок. 4 мегабайт)
Это клиентская часть CVS. Необходима каждому "коллективному" разработчику, работающему под платформой Win32.
GComp последней версии http://1c.alterplast.ru/download.html
(менее мегабайта)
Утилита, позволяющая конвертировать файл 1cv7.md в набор текстовых файлов и обратно. Необходима каждому "коллективному" разработчику конфигураций 1С.
KDiff3 http://kdiff3.sourceforge.net/
(2 с небольшим мегабайта)
Очень функциональная сравнивалка файлов и каталогов. Русифицирована. Интегрируется с WinCVS. Можно, конечно, пользоваться внутренней WinCVS'вой диффалкой, но зачем, когда есть такая красота?
Примечание: для интеграции kdiff3 с WinCVS установите сначала WinCVS, и только потом - kdiff3.
Python http://www.python.org/
(10 мегабайт)
Позволяет запускать всякие скрипты, которые существенно расширяют функционал WinCVS. Для самых первых экспериментов Питон тоже особо не нужен, но вещь в хозяйстве очень и очень полезная.
Можно также воспользоваться ActivePython, но он весит еще больше :)
По состоянию на февраль 2007 года я не рекомендую пользоваться Питоном из ветки 2.5.

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

Первые эксперименты

cvs init;

Для начала мы создадим и проинициализируем репозиторий. Для этого создадим пустую папочку, где-нибудь поближе к корню. Пусть это будет D:\repo.
Теперь запустим WinCVS. При первом запуске он спросит, где находится репозиторий. Укажем ему на нашу папочку (см. картинку).
Теперь решим небольшую проблемку. Наш будущий репозиторий - на диске D, а в списке дисков, доступных для WinCVS - только C (см. картинку). Обратим внимание на рисунок двух папочек чуть правее списка. Жмем туда.
Наш репозиторий все еще не проинициализирован. Идем в меню "Remote" - "Create a new repository". Выскакивает таблетка с несколькими закладками (см. рисунок). Читаем то, что написано на первой закладке, еще раз проверяем, что на второй закладке указан путь D:\repo, и смело жмем OK. Тут WinCVS задаст еще один вопрос: про домашнюю папку. Смысла этого вопроса я не знаю, но рекомендую указать еще одну пустую папку (см. рисунок).
Все, репозиторий готов к работе (это можно понять по наличию папки D:\repo\cvsroot).

cvs import;

Репозиторий есть, однако в нем ничего нет. Нужно это как-то исправить.
Создадим еще одну папку, где будут находится наши локальные файлы - d:\project.
Тут необходимо небольшое отступление. У нас сейчас - репозиторий находится на той же машине, где работаем и мы сами. Но в большинстве случаев репозиторий будет лежать где-то в сети, удаленно. При этом наша непосредственная работа как разработчиков будет происходить с локальной копией этих файлов на нашей машине. CVS же как раз занимается синхронизацией этих двух копий (при чем обмен данными идет в обе стороны). Так вот, если я говорю просто "репозиторий", или "центральный репозиторий", или "удаленный репозиторий" - это репозиторий главный, удаленный (даже если он находится на нашей машине). Если же я говорю "локальный репозиторий" или "локальная копия" - то это те файлы, с которыми мы непосредственно работаем.
В папке d:\project создадим файлик readme.txt в котором напишем "Здесь будет описание нашего первого распределенного проекта.". Теперь идем в окно WinCVS, в дереве каталогов находим папку d:\project, щелкаем правой мышкой, выбираем пункт Import module (см. картинку).

WinCVS проанализирует все файлы, которые есть у нас в папке, и выскажет свои предположения по поводу того, какие файлы текстовые, а какие - бинарные (см. картинку). Надо отметить, что предполагает он из рук вон плохо. И приходится практически для каждого расширения указывать тип вручную. Так и на этот раз - скажем, что readme.txt - текстовый, а не бинарный файл (см. картинку).

На следующем окошке (см. картинку) остановимся чуть подробнее. В поле "Repository path" можно указать имя нашего будущего "проекта" так, как он будет хранится в центральном репозитории. По умолчанию берется имя локальной папки, и лично мне оно не очень нравится. Именно сейчас время придумать имя своему проекту (или "модулю", в терминологии CVS), и я не хочу ошибится. Пусть это будет "Experiments". Именно это туда и пишем.
Второе важное поле - самое больше поле для ввода, озаглавленное "Enter the log message". Журнальная запись - это наш комментарий для самих себя и для других разработчиков. Создание хороших журнальных записей - это целое исскуство. Пока же просто напишем туда "Начали эксперименты с CVS". Остальные поля (в том числе, на других закладках) - не трогаем и оставляем как есть. Жмем OK. В нижнем окне "Output" (где показаны команды CVS и их результат) должно быть написано примерно следующее:


Filtering 'D:\project\'...
cvs -q import -I ! -I CVS -m "Начали эксперименты с CVS" 
Experiments avendor arelease (in directory D:\project\)
N Experiments/readme.txt

No conflicts created by this import


***** CVS exited normally with code 0 *****

Теперь заглянем в папку d:\repo и найдем там папку Experiments с файлом readme.txt,v внутри. Нашли? Отлично. Это и есть наш readme.txt в центральном репозитории.

cvs checkout;

Папку project теперь можно удалить - вся информация есть в центральном репозитории. Создадим локальную копию (папка project для этой цели не годится, сейчас вы поймете, почему). Для создания локального репозитория щелкнем правой мышкой на диске D: в дереве WinCVS и выберем пункт "Checkout module" (см. картинку). В поле "Module name" укажем "Experiments" и нажмем ОК (см. картинку). В Output увидим примерно следующее:


cvs -q checkout -P Experiments (in directory D:\)
U Experiments/readme.txt

***** CVS exited normally with code 0 *****

Заглянем в каталог D:\Experiments - и кроме нашего файла readme.txt мы увидим папку CVS, где WinCVS хранит свои служебные данные (например информацию о способе доступа к удаленному репозиторию для конкретного модуля).

Теперь сымитируем второго разработчика. Еще раз жмем "Checkout module" на корне диска D:\, но в отличие от предыдущего раза - ставим галочку "Check out into directory" и заполняем соответствующее поле значением "Experiments_2" (см. картинку).

cvs commit;

Итак, первый разработчик захотел добавить в свой D:\Experiments\readme.txt еще пару слов, и написал там второй строчкой "(c) 2004 Вася Пупкин."
После того, как файл был сохранен, в окне WinCVS он стал красного цвета (см. рисунок). Самое время сохранить изменения в центральном репозитории. Щелкаем по красному файлику правой мышкой, выбираем пункт "Commit selection" (см. картинку), в журнальную запись вставляем "Добавлены копирайты", жмем ОК.
Если все нормально, то в окне "Output" мы будем наблюдать примерно следующее:


cvs -q commit -m "Добавлены копирайты" readme.txt (in directory
D:\Experiments\)
Checking in readme.txt;
/usr/cvsroot/Experiments/readme.txt,v  <--  readme.txt
new revision: 1.2; previous revision: 1.1
done

***** CVS exited normally with code 0 *****

Обратим внимание на строчку "new revision: 1.2;", а так же на колонку "Rev." в WinCVS, где так же увидим номер ревизии - 1.2.

cvs update;

Теперь второй разработчик захотел обновить свои локальные файлы. Для этого он щелкает на папке с ними (то есть, D:\Experiments_2) правой мышкой и выбирает пункт "Update selection" (см. картинку). В окне "Output" мы увидим примерно следующее:


cvs -q update -P (in directory D:\Experiments_2\)
U readme.txt

***** CVS exited normally with code 0 *****

Строчка "U readme.txt" говорит нам о том, что файл readme.txt изменился. И мы видим, что и у второго разработчика теперь ревизия 1.2.

cvs add;

Теперь пришло время добавить в проект что-то более существенное, чем readme.txt. Вася Пупкин хочет создать скрипт сборки дистрибутива. Он создает новый файл makedistr.bat (и мы вслед за ним), и пишет туда примерно следующее:
pkzip -a experiments.zip *.txt
В окошке WinCVS мы видим этот файл со знаком вопроса (см. рисунок) и комментарием в колонке State - Unknown. Репозиторию нужно сказать о том, что у нас есть новый файл. Это просто - жмем на нем правой мышкой, выбираем "Add selection" (см. картинку). Обратим внимание, что нам сказал WinCVS в окне Output:


cvs -q add makedistr.bat (in directory D:\Experiments\)
cvs add: use 'cvs commit' to add this file permanently

***** CVS exited normally with code 0 *****

Итак, репозиторий уже знает, что мы добавили новый файл, но самого файла еще не получил (это можно увидеть, посмотрев в папку d:\repo - там пока еще нет файла makedistr.bat,v). Содержимое файла репозиторий получит по команде "commit", которую мы тут же и сделаем (эту операцию мы уже проделывали один раз - справитесь без моих подсказок).

cvs remove;

Вася Пупкин немного подумал, и решил, что со скриптом сборки дистрибутива он явно поторопился. И файл makedistr.bat надо бы удалить. Не проблем, выделяем файл, идем в контекстное меню "Modify" - "Remove" (см. рисунок). (В контекстном меню этой операции по умолчанию нет, и пожалуй, это правильно. Однако контекстное меню в WinCVS легко настраивается.) В ответ на Remove получаем в Output:


'makedistr.bat' has been moved successfully to the recycle bin...
cvs -q remove makedistr.bat (in directory D:\Experiments\)
cvs remove: use 'cvs commit' to remove this file permanently

***** CVS exited normally with code 0 *****

Мы видим, что файл был удален из локального репозитория, а центральному репозиторию так же была послана команда на удаление. Однако окончательное удаление, как и добавление файла, произойдет по команде "commit".

Отдельно стоит отметить, что в CVS невозможно удалить каталог. Но можно в CVS Preferences на закладке Global установить галочку "Prune empty directories", и тогда папки, из которых были удалены все файлы, будут удаляться при каждом cvs update в вашем локальном репозитории.

Итоги.

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

На помощь приходит gcomp - утилита, позволяющая разобрать MD в набор каталогов и текстовых файликов, а так же умеющая совершать и обратную операцию.

Назад Содержание Вперед
Rambler's Top100 1C:TOP-100

© 1998-2004 Fedor Ezeev.

Last updated: 2007-02-02