Введення у CVS
Дженіфер Весперман (Jennifer Vesperman) Introduction to CVS
CVS, або система паралельного контролю версій, – це система управління синхронною (одночасної) розробкою файлів. Зазвичай використовується у великих програмних проектах, але також є актуальною для роботи системних адміністраторів, технічних письменників і всіх, кому доводиться працювати з файлами.
CVS зберігає файли в центральному архіві, налаштованому таким чином (використовуючи стандарти Unix доступу до файлів), щоб бути доступним для всіх користувачів файлів. Команда, що віддається архіву: «check out» – вилучення файлу з архіву для роботи над ним і «commit» – зафіксувати зміни при поверненні до архіву. Програма також сканує файли, що переміщуються до архіву або з архіву, щоб запобігти накладенню однієї версії на іншу.
Система забезпечує збереження та зберігання записів про всі зміни файлу, які виявляються надзвичайно корисними у випадках, якщо начальник вирішить, що йому потрібна та деталь, яку ви викинули ще місяць тому. Вона також забезпечує, щоб для збереження резервної копії проекту було достатньо резервної копії архіву (забезпечуючи зберігання всіх необхідних файлів усередині архіву). Зазвичай CVS використовується як допоміжний засіб управління проектами, але також може використовуватися для окремих файлів.
Типові користувачі
CVS призначена для розробників – як для індивідуальних, так і працюючих у команді. Індивідуальних розробників CVS забезпечує архівом, працювати з яким можна з дому, офісу або клієнтського сайту, не тягнучи за собою купу дисків. Система також забезпечує контроль версій, що дозволяє робити повернення до попередньої версії без втрати даних. Для працюючих у команді CVS також ведезапис даних, хто якусь лінію файлу змінив і запобігає безпосереднє накладення однієї версії на іншу.
Системні адміністратори можуть зберігати в CVS налаштування. Ви можете змінювати файл, використовуватиcvs commit, перевіряти його. Якщо файл буде пошкоджено – поверніться до версії до зміни, навіть якщо ви щойно виявили збій, зафіксований шість місяців тому.
Адміністратори можуть зберігати в CVS дерево налаштувань для багатомашинних серверних систем. Бажаєте додати новий сервер? Просто використовуйтеcvs checkoutдля дерева конфігурацій для цього типу сервера. Фіксування всіх змін також допоможе вам зберегти відомості про те, хто що зробив і коли.
CVS також корисна для письменників. Я зберігаю ці статті в дереві CVS – якщо я втрачу локальну копію, вона автоматично відновиться з резервної. Це також є актуальним у випадку співпраці з будь-ким, або якщо я раптом виявлю, що мені потрібно відновити розділ, який вже видалено.
Пояснення до прикладів
Приклади, наведені у цій статті, передбачають наявність архіву проекту, що вже існує.
Необхідні змінні середовища
Якщо ви маєте на увазі використовувати один архів, встановіть змінне середовище$CVSROOTдля опису детального шляху архіву, зробіть це у форматі:protocol:user@host:path. Це має виглядати приблизно так::ext:[email protected]:/home/cvs.
З міркувань безпеки встановіть змінне середовище$CVS_RSHдорівнюєssh. Для доступу до архіву на віддаленій машині CVS за замовчуванням використовуєrsh.
Доступ до дерева CVS: вилучення
CVS зберігає файли в центральному архіві, але користувачі працюють безпосередньо з робочою копієюфайлу.
-
Створіть директорію, в якій працюватимете. Я схильна використовувати
/cvs.
ДиректоріяCVS– спеціальна директорія, яка використовується CVS для її власних цілей.CVS/Entriesзберігає список відомих CVS файлів та субдиректорій.CVS/Repositoryмістить опис маршруту до відповідної директорії в архіві.CVS/Rootмістить опис шляху до архіву, так що вам не доведеться ще раз застосовувати для цих файлів опцію-d шлях-до-архіву.
Врахуйте, щоCVS/Rootзамінює змінне середовище$CVSROOT, тому, якщо змінюєте архів, вам доведеться заново витягувати модуль.
Директоріяsrcмістить вихідні файли наведеного у прикладі проекту.sample.c,sample.hтаMakefile– звичайні файли у робочій копії, а в архіві вони зберігаються у форматі, що реєструє всі зміни.
Отримання змін: оновлення cvs
Щодня перед початком роботи і щоразу, коли хтось ще вносить і фіксує будь-які зміни, увійдіть у свою робочу директорію і запустітьcvs update. Таким чином, буде зроблено порівняння ваших робочих копій з архівними копіями і вам будуть імпортовані всі змінені файли.cvs update -dтакож надасть у ваше розпорядження будь-які нові директорії.
Оновлення записів про стан кожного файлу під час перевірки: UfileУспішно оновлено AfileДодано але ще не зафіксовано (потрібно запуститиcvs commit) RfileВидалений але ще не зафіксований (потрібно запуститиcvs commit) MfileМодифікований у вашій робочій директорії: файл в архіві був змінений, а файл у вашій робочій директорії за часом створення старший , ніж останній (за часом), перевірений CVS або файли в архіві були внесені зміни, які система могла б безпечно поєднати з вашими. CfileІснуючий конфлікт між архівною копією та вашою копією вимагає ручного втручання?fileфайл є у вашій робочій директорії, але відсутній в архіві, і CVS не знає, що з ним робити
Коли зміни входять у конфлікт: об'єднання файлів
Якщо CVS не може зробити успішне об'єднання зміненого файлу та архівної копії, вона повідомить про конфлікт у даних, що виводятьсяcvs update. Оригінал файлу зберігається в.#file.versionу робочій директорії, і отриманий в результаті об'єднання файл зберігається під ім'ям оригінального файлу.
CVS визначає об'єднання конфліктуючих рядків в оточенні CVS-тегів. CVS не може автоматично зробити об'єднання конфліктних версій, коли в різних версіях файлу змінено один і той же рядок.
Внесення змін: зафіксувати у cvs
Коли ваші файли вилучені, можете редагувати та компілювати їх звичайним чином. Додайте зміни до архіву за допомогою командиcvs commit. Для запуску цієї команди потрібно знаходитись в ієрархії вище, ніж змінені вами файли – ви можете запустити її з бази вашої робочої копії.
Ви також можете використовувати командуcvs commitім'я_файлу, яка зафіксує окремийфайл чи рекурсивно зафіксує директорію. У різних проектних команд складаються різні думки, як часто використовуватиcvs commit. Щодо цього є дві добрі практичні поради: «щоразу, коли компіляція пройшла нормально» і «щодня перед ланчем і перед доглядом».
CVS перевіряє кожну директорію та субдиректорію нижче поточної робочої директорії. Усі файли, які відомі CVS будуть перевірені щодо змін. Якщо ваш cvs-архів не розташований на локальній машині, CVS запросить пароль для віддаленої машини.
Я настійно рекомендую створювати докладні примітки про зміни – якщо ви збираєтеся повернутися до попередньої версії і все, що у вас є, це повідомлення «виправлено кілька помилок», то без використання командиcvs diffви не знатимете, який версії повернутися.
Якщо існує ймовірність конфлікту, тоcvs commitне працюватиме. Виправте ситуацію, запустивши в архіві командуcvs update– CVS спробує об'єднати файли та запитатиме про допомогу людини, якщо не зможе виконати злиття без втрати даних.
Створення нових файлів: додавання до cvs
Якщо CVS не знає, що робити з файлами, то після процесу фіксації і в процесіcvs updateвона виводить їх із позначкою «знак питання». Перш, ніж CVS їх розпізнає, вони мають бути внесені до архіву. Використовуйтеcvs addім'я_файлу, щоб відзначити новий файл для включення до архіву. CVS не помістить файл до архіву, поки ви не виконаєтеcvs commit.
Директорії додаються за допомогою цієї команди. Не можна додавати файли, що містяться в директорії, перш ніж додати саму директорію.
Видалення файлів: видалення в cvs
Щоб позначити файл, який потрібно видалити зі списку робочих копій, використовуйте командуcvs removeім'я_файлу. Перед тим, як CVS видалити файл з архіву, ви повинні видалити його з файлової системи. Насправді CVS не видаляє файл повністю, вона поміщає його в особливу субдиректорію архіву, яка називаєтьсяAttic.
Директорії не видаляються
CVS не видаляє директорії – це порушить запис змін. Директорії можуть бути видалені за зміни архіву – це питання обговорюється у статті «Адміністрування CVS».
Заключні слова
CVS дуже корисна як утиліта для спільних розробок, підтримки історії зміни файлу та забезпечує загальну базу даних для файлів усіх видів. Також дуже варта річ для досліджень та ігор.
Для додаткового читання
- man cvs
- man 5 cvs
- info cvs– є хороші розділи «що є CVS» та «що не є CVS». Також у посібнику є корисні пояснення. Розділ «Архів» глибше розглядає резервні протоколи.
- З колонки Big Scary Demons: BSD Tricks: CVS
- На Sourceforge є кілька статей з CVS. Перегляньте розділи 6 та 7 на сторінці Sourceforge Site Docs.