українська документація з CVS
Що таке CVS і навіщо це треба?
Необхідність в системі контролю версій з'являється наприклад тоді, коли в досить великому проекті деяка помилка виявляється тільки через деякий час після внесення змін. За допомогою CVS можна дуже швидко і просто отримати необхідну версію файлу і побачити, що викликало появу помилки.
Перевага CVS проти звичайного резервного копіювання файлів після кожної зміни в тому, що CVS зберігає всі версії в одному файлі, додаючи лише дані про внесені зміни.
Також CVS допомагає при роботі кількох людей над одним проектом - вона не дозволяє змінювати одночасно одну і ту ж чати файлу кільком людям. При цьому кожен окремий розробник працює тільки зі своєю копією файлу, що не викликає помилок поділу доступу за одночасної роботи кількох розробників. CVS сама стежить за об'єднанням змін.
Чого не може CVS
CVS стежить за перетином змін, внесених різними людьми. Але це відстеження суто технічне - тобто.конфліктвиникає тільки у разі змін одного й того ж тексту в одній і тій самій частині. CVS не відслідковує логічні конфлікти. Тобто. наприклад, якщо хтось змінив параметри функції foo у файлі aaa.c, але в той же час хтось інший використовував виклик цієї функції у файлі bbb.c, використовуючи старі параметри -CVS не зможе це попередити.
Основні поняття CVS
Кожен файл має свій унікальнийномер версії. Номер версії є кілька цілих чисел, розділених точками, наприклад 1.2.2.5.
Версія першого файлу зазвичай 1.1. Кожна успішна зміна збільшує останню праву кількість номерів версії на одиницю. Але cvs не вводить такого обмеження, як лінійністьрозробки. Тобто дерева версій можуть бути відгалуження за якими можуть вестися розробки. Будь-які зміни, зроблені в якійсь галузі можуть бути легко внесені в основну лінію. Кожна гілка має свій номер, який додається до номера версії зліва. Це дозволяє мати кілька відгалужень від однієї версії. Файли у гілках нумеруються додаванням ще однієї точки та цифри. Тобто для гілки 1.2.2 файли нумеруватимуться як 1.2.2.1, 1.2.2.2, 1.2.2.3 і т.д. Гілки нумеруються парними числами, починаючи з 2.
Номери гілок, що закінчуються на .0 (наприклад 1.2.0), використовуються CVS для власних потреб. Гілка 1.1.1 має особливе значення. Вона використовується наприклад тоді, коли ви хочете, щоб зміни, внесені в чужі вихідні тексти, можна було застосувати при отриманні нових версій програми.
З версією під Win32 трохи складніше - все, що я знайшов, це ось це.
Як встановити під UNIX?
Перед тим, як встановлювати cvs, варто перевірити, а чи не встановлений він уже? Наберемо в командному рядку Облом-с, його немає. Але якщо ви отримали список ключів - значить швидше за все cvs вже встановлений. Тоді все, що йде до сюди, можна пропустити. Отже, у вас вже є файл з назвою, схожою на cvs-1.x.x.rpm або cvs-1.x.x.tar.gz. Ну, перший варіант вимагатиме від вас найменших зусиль для встановлення - для цього треба лише набрати в командному рядку: Так. Варто все-таки спочатку почитати якісь доки що-небудь. Добре читаємо опис пакету - "cvs is frontend for rcs". Гаразд, ставимо rcs, благо він є відразу: Начебто встановився. Тепер повторюємо встановлення cvs. Ура, встановилося! Якщо ж ні, треба подивитися, чого не вистачає і просто встановити потрібний пакет.
Тепер спробуємо щось зробити, наприклад: Ага. Як уже говорилося спочатку, cvsзберігає всі свої дані врепозиторії, і, звичайно, наш свіже CVS не знає, де ж знаходиться поточний репозиторій (їх, в принципі, може бути і кілька, але про це - пізніше, далі поки буде розглядатися випадок єдиного репозиторію).
Так ось, для роботи нам треба задати базовий каталог цього самого репозиторію. Це можна зробити двома способами - щоразу явно вказувати його ключем -d (наприклад cvs -d/usr/src/CVS init) або задати змінне середовище CVSROOT, що набагато зручніше. Можна задати її глобально, у стартапі шелла, а можна ще якось. Якщо з CVS працюють кілька людей, є сенс прописати її, наприклад (для bash) в /etc/profile: Звичайно, можна розмістити репозиторій у будь-якому каталозі, а не тільки в /usr/src/CVS. Тут треба сказати кілька слів про права доступу. Оскільки з CVS швидше за все працюватиме кілька людей, то він має бути доступним для них усіх і на читання, і на запис. Для цього варто створити окрему групу, наприклад devs, і встановити права на /usr/src/CVS як drwxrwx---. Тих, хто працюватиме з CVS треба, відповідно, просто додавати до цієї групи. Тепер треба створити та ініціалізувати репозиторій. Це робиться командою init, але тут є невелика каверза. Якщо це зробити від рута, то тільки він і зможе скористатися cvs. Якщо ж намагатися створювати репозиторій від користувача, необхідно право створювати каталоги в каталозі, базовому для репозиторія. Тому краще зробити init від рута, а потім змінити групу на devs. Ось і все. Тепер про місцезнаходження репозиторію можна забути. Працювати з ним не рекомендується, для виконання практично будь-яких операцій є відповідні команди cvs.
Як встановити під NT?
Перші кроки у CVS
Імпорт вихідних джерел та створення модуля
Отриманнякопії фалів з репозиторію
Визначення модуля
У найпростіших випадках наступних кроків достатньо визначення модуля.
- Отримати копію файлу модулів.
- Відредагувати файл 'modules' і вставити рядок, що визначає модуль.
- Зафіксувати ваші зміни у файлі модулів.
- Звільнити модуль модулів.
Підтвердження змін
Оновлення робочої копії
Команди CVS
[cvs_options] - це глобальні опції, що впливають на всі підкоманди CVS:
/.cvsrc'. Ця опція найчастіше використовується через неортогональність набору опцій CVS. Наприклад, опція `-N' для `cvs log' (вимкнути відображення імен дескрипторів) не має аналога для увімкнення відображення. Так що якщо ви маєте `-N' як входження у `
/.cvsrc' для `diff', то вам знадобиться `-f' для відображення імен дескрипторів.
[cmd_options] - це опції, які залежать від кожної конкретної команди, але більшість команд мають набір загальних опцій, які наведені нижче. Надалі, під час опису команд, ці опції не вказуються, а описуються лише спеціальні опції, характерні цієї команди.
ПОПЕРЕДЖЕННЯ: команда `history' - виняток; вона підтримує багато опцій, які конфліктують навіть із цими стандартними опціями.
Стан файлу
Оновлення файлів (cvs update)
Додавання файлів до проекту (cvs add)
Отримання вихідних текстів із репозиторію (cvs checkout)
Checkout створює підкаталог, що збігається з ім'ям модуля і потіммістить у ньому файли і каталоги модуля відповідно до репозиторію.
Підтвердження змін (cvs commit)
Якщо будь-який файл має старішу версію, ніж у репозиторії, але змінено, то фіксація не виконується, а виводиться повідомленняUp-to-date check failed. Це означає, що спочатку потрібно оновити робочу копію за допомогою команди update.
Виявлення різниці між модифікаціями (cvs diff)
Якщо дано якісь імена файлів, лише ці файли будуть порівнюватися. Якщо дані якісь директорії, то будуть порівнюватися всі файли в них.
Статус виходу буде 0, якщо відмінність не знайдено, 1, якщо відмінність знайдено, і 2 при помилці.
Перегляд статусу файлів та користувачів
Створення файлу `$CVSROOT/CVS/ROOT/history' повинно бути задіяне ведення журналу.
ПОПЕРЕДЖЕННЯ:history використовує `-f', `-l', `-n', і `-p' способами, які конфліктують з нормальним використанням у CVS.