Илья Рыженков
Управление исходными текстами
Часть 1. Краткое руководство по CVS
Введение
Необходимость управления исходными текстами
Управление исходными текстами является маленькой частью большой и сложной науки управления созданием программного обеспечения. Тем не менее, это одна из важнейших частей с точки зрения автоматизации, поскольку маленький и, в общем, несложный механизм обеспечивает информацией множество других частей общего бизнес-процесса. Управление исходными текстами имеет несколько аспектов: управление версиями, автоматическая генерация документации, поддержка единого стиля кода и контролируемые изменения. Постепенно мы раскроем все эти темы, но начнём, пожалуй, с наиболее востребованной части - управлением версиями. В этих статьях мы не будем подробно рассматривать общий подход к управлению разработкой, заинтересованных отсылаем к другим ресурсам (см. ссылки в конце статьи), однако на некоторых важных аспектах мне бы хотелось остановиться прежде, чем перейти собственно к рассмотрению темы данной статьи.
Существует множество различных точек зрения на то, каким должен быть процесс разработки программного обеспечения. Одни желают формального, тяжелого, гарантированного процесса, другим больше по душе легковесный, мобильный, рискованный процесс. Всё зависит от потребностей заказчика, компании, проекта и команды. Тем не менее, так или иначе, команда программистов создаёт код, который развивается и меняется со временем. В связи с этим можно отметить несколько фактов:
• В коде исправляются старые и появляются новые ошибки, добавляются новые возможности и удаляются устаревшие участки кода, забывается то, что было в коде раньше - код нуждается в истории. Иначе невозможно установить, когда появилась проблема, какое изменение породило ошибку и кто, в конце-то концов, виноват.
• Если проект разрабатывается командой, в которой больше одного участника - код нуждается в синхронизации. Иначе команда окажется перед лицом невоспроизводимых ошибок, постоянных проверок на совместимость и изнурительных периодических авралов для сбора всего написанного кода в одну работающую систему.
• Если результаты работы команды используются вне самой команды - код нуждается в воспроизводимости. Иначе команда не сможет повторить какую-то предыдущую версию, которая имеется у пользователя, решить его проблему и выдать ему исправленную версию независимо от состояния кода в настоящий момент.
Таким образом, необходим инструмент, позволяющий централизованно хранить, получать и обновлять исходные тексты, отслеживать историю, получать версию кода по некоторым критериям и выполнять некоторые автоматические операции с кодом. Одним из таких инструментов является
Другие системы
Существует множество других систем для управления версиями, среди которых можно упомянуть Microsoft Visual SourceSafe, StarBase’s StarTeam и Rational ClearCase. В задачи данной статьи не входит ни сравнительный анализ этих систем, ни описание уникальных возможностей и недостатков. Если вы уже знакомы с какой-либо из систем управления версиями, постарайтесь не искать аналогий и способов сделать знакомые операции в новой среде. CVS отличается от этих систем в первую очередь
Структура статьи
Если вам интересны лишь общие концепции и понимание системы как таковой - достаточно прочитать раздел «Основные понятия» и не тратить время на детали использования. В этом разделе объясняются принципы назначения версий, связь репозитория и рабочих каталогов, общий взгляд на автоматизацию процессов, а также кратко рассказано о связи CVS с другими подсистемами процесса управления исходными текстами.
Если вы собираетесь использовать CVS в своей работе, но пока не знаете, как к этому подступиться - надеюсь, что вторая часть статьи «Базовые операции» поможет вам совершить первые и последующие шаги в этом направлении. Тем не менее, очень рекомендуется прочитать и первую часть, для того, чтобы не запутаться в терминах и воспринять идеологию CVS в целом.
Основные понятия
Что такое CVS?
CVS - это система управления версиями. На самом деле, для CVS не важно, версиями чего вы управляете, однако здесь этот инструмент будет рассматриваться в том контексте, в котором он обычно используется - управление исходными текстами при разработке ПО. CVS помогает обеспечить все перечисленные во введении потребности по управлению кодом и имеет большое количество дополнительных возможностей, которыми зачастую пренебрегают. Он основан на идее центрального хранилища, с которым синхронизируются версии, используемые всеми участники проекта. Сохраняются все версии, какими мелкими бы ни были изменения. При подходе в лоб это могло бы занять неоправданно много места, однако CVS держит все версии в одном файле, сохраняя лишь изменения от версии к версии, решая, таким образом, проблему дискового пространства. Кроме того, такой подход позволяет легко сделать резервную копию всего проекта вместе со всей историей изменений.
Каждый разработчик имеет собственную копию всех исходных текстов проекта, с которыми он работает локально на своём компьютере. Разработчик вносит необходимые изменения в код, после чего помещает изменения с соответствующим комментарием в центральное хранилище, называемое