- Русская документация по CVS
- Что такое CVS, и зачем это надо?
- Чего не может CVS
- Основные понятия CVS
- Где взять?
- Как установить под UNIX?
- Как установить под NT?
- Первые шаги в CVS
- Импорт исходников и создание модуля
- Получение копии фалов из репозитория
- Определение модуля
- Подтверждение изменений
- Обновление рабочей копии
- Работа над проектом с использованием CVS
- Начало проекта
- Создание модуля
- Определение модуля
- Команды CVS
- Состояние файла
- Опции
- Обновление файлов (cvs update)
- Опции
- Выход
- Добавление файлов в проект (cvs add)
- Опции
- Получение исходных текстов из репозитория (cvs checkout)
- Опции
- Подтверждение изменений (cvs commit)
- Опции
- Выявление различий между модификациями (cvs diff)
- Просмотр статуса файлов и пользователей
- Опции
- Импорт исходных текстов с использованием vendor branches
- Опции
- Удаление файлов из проекта (cvs remove)
- Опции
- Пересылка и переименование файлов
- Нормальный путь переименования
- Пересылка файла истории
Русская документация по CVS
Оригинал: ruxy.org.ruПочти весь изложенный ниже материал написан исходя из того, что мы работаем под одной из версий Linux, но я не сомневаюсь, что для других *nix’ов изменения будут крайне незначительные
Useful Links
/// |
Что такое 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’ и вставить строку, определяющую модуль.
- Зафиксировать ваши изменения в файле модулей.
- Освободить модуль модулей.
Теперь каждый пользователь может работать со своей копией файлов. Попробовав собрать проект получаем ошибку — я забыл указать в makefil’е библиотеку X11. Редактируем его, добавляя нужную строчку и проверяем.
Подтверждение изменений
Хорошо, теперь предположим, что другой пользователь наконец догадался об этой же самой ошибке и тоже решил опубликовать свой вариант:
Обновление рабочей копии
Это означает, что у нас не самая свежая копия Makefile и ее следует обновить перед тем, как вносить что-то свое. Делаем это: Ошибку-то мы исправили, но исправили по-разному, а поэтому появился конфликт: Маркером >>>>>>>> cvs отметил начало конфликтного участка в пользовательской копии файла, а после маркера ======== идет тот вариант текста, который есть в репозитории. Маркером , но лучше воспользоваться командой release: Итак, cvs проверит, есть ли неподтвержденные изменения и (если указан ключ -d) удалит рабочую копию файлов. Строка ‘? xlines’ означает, что обнаружен неизвестный файл xlines — это наш скомпилированный бинарник.
Оглавление |
Работа над проектом с использованием CVS
Начало проекта
Создание модуля
Определение модуля
Команды CVS
[cvs_options] — это глобальные опции, которые воздействуют на все подкоманды CVS:
-b bindir | Используйте bindir как директорий, в котором размещена вся программа RCS. Перезаписывает установку переменной среды $RCSBIN и любой прекомпилированный директорий. Этот параметр должен специфицироваться как полное имя пути. |
-d cvs_root_directory | Используйте cvs_root_directory как имя пути корневого директория для репозитория. Перезаписывает установку переменной среды $CVSROOT. Этот параметр должен быть специфицирован полным именем пути. |
-e editor | Используйте editor для введения журнальной информации о модификации. Перезаписывает установку переменных среды $CVSEDITOR и $EDITOR. |
-f | Не читать файл ` /.cvsrc’. Эта опция наиболее часто употребляется из-за неортогональности набора опций CVS. Например, опция `-N’ для `cvs log’ (выключить отображение имен дескрипторов) не имеет аналога для включения отображения. Так что если вы имеете `-N’ как вхождение в ` /.cvsrc’ для `diff’, то вам может понадобиться `-f’ для отображения имен дескрипторов. |
-H | Для отображения информации об использовании специфицированной cvs_command (но не для выполнения команды).Если вы не специфицировали имя команды, то `cvs -H’ отобразит сводку всех доступных команд. |
-l | Не регистрировать cvs_command в истории команды. |
-n | Не изменяет каких-либо файлов. Пытается выполнить `cvs_command’, но только для выпуска отчетов. Не удаляет, не обновляет и не сливает никаких существующих файлов и не создает новых файлов. |
-Q | Делает команду полностью «молчаливой». Команда только генерирует выход для серьезных проблем. |
-q | Делает команду в чем-то «молчаливой». Информационные сообщения, такие как отчеты о рекурсиях по поддиректориям, подавляются. |
-r | Делает новые рабочие файлы файлами только для чтения. Дает такой же эффект, как если бы переменная среды $CVSREAD была установлена. Умолчание делает рабочие файлы перезаписываемыми. |
-t | Трассирует выполнение программы. Отображает сообщения, показывающие шаги функционирования CVS. В частности, полезна с `-n’ для изучения потенциального влияния незнакомых команд. |
-v | Отображает информацию о версии и авторских правах для CVS. |
-w | Делает новые рабочие файлы перезаписываемыми. Перезаписывает установку переменной среды $CVSREAD. По умолчанию файлы создаются перезаписываемыми, если $CVSREAD не установлена или `-r’ не задана. |
[cmd_options] — это опции, которые зависят от каждой конкретной команды, но большинство команд имеет набор общих опций, которые перечислены ниже. В дальнейшем, при описании команд, эти опции не указываются, а описываются только специальные опции, характерные для данной команды.
ПРЕДУПРЕЖДЕНИЕ : команда `history’ — исключение; она поддерживает много опций, которые конфликтуют даже с этими стандартными опциями.
-D date_spec | Для использования самых последних модификаций не позднее, чем date_spec . date_spec — единственный аргумент, некоторая дата в прошлом. Спецификация является распределенной, когда вы используете ее для создания личной копии файла исходного текста; т.е. когда вы получаете рабочий файл, используя `-D’, CVS записывает вами специфицированную дату, так что дальнейшие обновления в том же директории будут использовать ту же дату (если вы не перезапишете ее явно). Множество форматов дат поддерживается встроенными средствами RCS, подобными описанным в co(1), но не точно такими же. date_spec интерпретируется как находящаяся в местном часовом поясе, если не специфицировано другое. Примеры значимых спецификаций дат включают: 1 month ago 2 hours ago 400000 seconds ago last year last Monday yesterday a fortnight ago 3/31/92 10:00:07 PST January 23, 1987 10:05pm 22:00 GMT `-D’ доступна с командами checkout.diff.export.history.rdiff.rtag и update. (Команда history использует эту опцию несколько отличным способом;). Не забывайте заключать в кавычки аргумент флага `-D’, чтобы ваш командный файл не интерпретировал пробелы как разделители аргументов. Команда с использованием флага `-D’ может выглядеть примерно так: $ cvs diff -D «1 hour ago» cvs.texinfo | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-f | Когда вы специфицируете дату или дескриптор для команды CVS, то они в норме игнорируют файлы, которые не содержат этот дескриптор (или не существовали до этой даты). Используйте опцию `-f’, если вы хотите искать файлы, даже когда нет соответствий для дескриптора или даты. (Будет использована самая последняя модификация файла). `-f’ доступна с такими командами: checkout, export, rdiff, rtag и update. ПРЕДУПРЕЖДЕНИЕ: Команда commit также имеет опцию `-f’, но она имеет другое поведение для этой команды. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-H | Помощь (help). Описывает опции, доступные для этой команды. Это единственная опция, поддерживаемая для всех команд CVS. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-k | kflag Изменяет обработку ключевых слов в RCS по умолчанию. Ваша спецификация kflag является распределенной, когда вы используете ее для создания личной копии файла исходных текстов; т.е. когда вы используете эту опцию с командами checkout или update, CVS ассоциирует ваш выбранный kflag с файлом и продолжает использовать его с будущими командами обновления в том же файле, пока вы не специфицируете другое. Опция `-k’ доступна с командами add, checkout, diff и update. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-l | Локальность; для прогона только в текущем рабочем директории, без рекурсии по поддиректориям. ПРЕДУПРЕЖДЕНИЕ: Это не то же самое, что общая опция `cvs -l’, которую вы специфицируете слева от команды CVS! Доступна со следующими командами: checkout, commit, diff, export, log, remove, rdiff, rtag, status и update. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-m message | Для использования message в качестве журнальной информации, вместо вызова редактора. Доступна со следующими командами: add, commit и import. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-n | Не прогонять любую программу checkout/commit/tag. (Программа может быть специфицирована для прогона каждой из этих функциональных единиц в модульной базе данных; но эта опция обойдет их). ПРЕДУПРЕЖДЕНИЕ: Это не то же самое, что общая опция `cvs -n’, которую вы можете специфицировать слева от команды CVS! Доступна с командами checkout, commit, export и rtag. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-P | Для отсечения (удаления) директориев, ставших пустыми после обновления командами checkout или update.В норме пустой директорий (без файлов с управляемыми модификациями) остается «одиноким».Спецификация `-P’ «тихо» удаляет эти директории из ваших оформленно выведенных исходных текстов. Она не удаляет директорий из репозитория, а только из вашей оформленно выведенной копии. Заметим, что эта опция подразумевается при использовании опций `-r’ или `-D’ команд checkout и export. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-p | Направляет файл, извлекаемый при поиске из репозитория, на стандартный выход, а не на запись в текущем директории. Доступна с командами checkout и update. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-w | Специфицирует имена файлов, которые должны быть отфильтрованы. Эту опцию можно использовать повторно. Спецификацией может быть образец имени файла того же типа, который вы можете специфицировать в файле `.cvswrappers’. Доступна с командами import и update. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-r | tag Для использования модификации, специфицированной аргументом tag , вместо головной (по умолчанию) модификации. Так же как любые дескрипторы, определенные командами tag и rtag, два специальных дескриптора всегда доступны: `HEAD’ ссылается на самую последнюю версию, доступную в репозитории, а `BASE’ ссылается на модификацию, которую вы оформленно вывели последней в текущий рабочий директорий. Спецификация дескриптора является распределенной, когда вы используете эту опцию при checkout или update для создания вашей собственной копии файла: CVS помнит дескриптор и продолжает использовать его в будущих командах обновления, пока вы не специфицируете другое. Дескриптор может быть символьным или численным. Специфицирование глобальной опции `-q’ с командной опцией `-r’ часто полезно для подавления предупреждений, когда файл истории RCS не содержит специфицированного вами дескриптора. ПРЕДУПРЕЖДЕНИЕ: Это не то же самое, что общая опция `cvs -r’, которую вы специфицируете слева от команды CVS! `-r’ доступна с командами checkout, commit, diff, history, export, rdiff, rtag и update. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Оглавление |
Состояние файла
Опции
-v | Для расширенной информации. В добавление к нормально отображаемой информации печатать все символические дескрипторы вместе с численными значениями модификаций или ветвей, на которые они ссылаются. |
Оглавление |
Обновление файлов (cvs update)
Опции
-A | Переустановить любые распределенные дескрипторы, даты или опции `-k’. (Если вы получили рабочую копию файла применением одной из опций `-r’,`-D’ или `-k’, то CVS запомнит соответствующий дескриптор, дату или kflag и продолжит использовать их в будущих обновлениях; используйте опцию `-A’, чтобы заставить CVS забыть эти спецификации и искать головную модификацию файла). |
-d | Создать любые директории, существующие в репозитории, если их нет в рабочем директории. В норме update действует только на директориях и файлах, которые уже внесены в ваш рабочий директорий. Это полезно для обновления директориев, созданных в репозитории после начального checkout; но, к сожалению, это дает побочный эффект. Если вы преднамеренно избегаете некоторых директориев в репозитории при создании вашего рабочего директория (или используя имя модуля или явным перечислением нужных вам файлов и директориев в командной строке), то обновление с `-d’ создаст не те директории, какие вы хотите. |
-I name | Игнорировать файлы, чьи имена соответствуют name (в вашем рабочем директории) при update. Вы можете специфицировать `-I’ более одного раза в командной строке для игнорирования нескольких файлов. По умолчанию update игнорирует файлы, чьи имена соответствуют следующим: Используйте `-I!’ для исключения игнорирования любых файлов. См. Раздел B.8 о других способах заставить CVS игнорировать некоторые файлы. |
-Wspec | Специфицировать имена файлов, которые нужно фильтровать при update. Можно использовать эту опцию повторно. spec может быть шаблоном имени файла того же типа, что вы специфицируете в файле `.cvswrappers’. |
-j branch | Слить изменения, сделанные между результирующей модификацией и модификацией, на которой она базируется (например, если ссылаются на branch, то CVS сольет все изменения, сделанные в этой ветви, в ваш рабочий файл). При двух опциях `-j’ CVS сольет изменения между двумя соответствующими модификациями.Эту опцию можно использовать для удаления какого-то кусочка из вашего рабочего файла; если файл `foo.c’ базируется на модификации 1.6 и вы хотите удалить изменения, сделанные между 1,3 и 1.5, то можно выполнить: Вдобавок, каждая опция -j может содержать опциональную спецификацию даты, которая при использовании с ветвями может ограничить выбранную модификацию до одной со специфицированной датой. Опциональная дата специфицируется добавлением двоеточия (:) к дескриптору: `-jSymbolic_Tag:Date_Specifier’. |
Выход
U file | Файл обновлен по отношению к репозиторию. Это делается для любого файла, существующего в репозитории, но не в ваших исходных текстах, и для файлов, которые вы не изменяли, но которые не являются самыми поздними версиями, доступными в репозитории. |
A file | Файл был добавлен к вашей личной копии исходных текстов и будет добавлен к репозиторию при исполнении commit на этом файле. Это напоминание для вас, что файл нужно фиксировать. |
R file | Файл удален из вашей личной копии исходных текстов и будет удален из репозитория при выполнении commit на этом файле. Это напоминание для вас, что файл нужно фиксировать. |
M file | Файл модифицируется в вашем рабочем директории. `M’ может указывать на одно из двух состояний файла, на котором вы работаете: или нет модификаций того же файла в репозитории, так что ваш файл остается таким, каким вы видели его в последний раз; или есть модификация в репозитории и в вашей копии, но они слиты успешно без конфликта в вашем рабочем директории. CVS печатает некоторые сообщения, если она сливает вашу работу, и делается резервная копия вашего рабочего файла (как он выглядел перед исполнением update). Точное имя этого файла печатается при исполнении update. |
C file | Обнаружен конфликт при попытке слияния ваших изменений в file с изменениями из репозитория. file (копия в вашем рабочем директории) — это теперь выход команды rcsmerge(1) на двух модификациях; немодифицированная копия вашего файла есть также в вашем рабочем директории, с именем `.#file.revision’, где revision — это модификация RCS, от которой произошел ваш модифицированный файл. (Заметим, что некоторые системы автоматически чистят файлы, начинающиеся с `.#’, если ими не пользовались несколько дней. Если вы хотите сохранить копию вашего первоначального файла, то хорошо бы переименовать его.) |
? file | file находится в вашем рабочем директории, но не соответствует ничему в репозитории и не находится в списке файлов CVS для игнорирования (см. описание опции `-I’). Заметим, что не выдается предупреждений для некондиционных директориев, встречаемых CVS. Директорий и все его содержимое незаметно игнорируется. |
Оглавление |
Добавление файлов в проект (cvs add)
Опции
-k kflag | Эта опция специфицирует способ по умолчанию, которым этот файл будет оформленно выводиться. См. rcs(1) и co(1). Аргумент kflag сохраняется в файле RCS и может быть изменен командой admin -k. Специфицирование `-ko’ полезно для оформленного ввода исполняемых файлов, которые не должны иметь расширенных строк идентификаторов RCS. |
-m description | С помощью этой опции вы можете дать описание для файла. Описание появляется в журнале истории (если он задействован). Оно также будет сохранено в файле истории RCS в репозитории при фиксации файла. Команда log отображает это описание. Описание может быть изменено при помощи `admin -t’. Если вы опускаете флаг `-m description ‘, то используется пустая строка. Тогда описание не запрашивается. |
Оглавление |
Получение исходных текстов из репозитория (cvs checkout)
Checkout создает подкаталог, совпадающий с именем модуля и затем распологает в нем файлы и каталоги модуля в соответствии с репозиторием.
Опции
-A | Переустановить любые распределенные дескрипторы, даты и опции `-k’. (Если ваш рабочий файл использует одну из опций `-r’, `D’ или `-k’,то CVS запомнит соответствующие дескриптор, дату или kflag и продолжит использовать их в будущих обновлениях; используйте опцию `-A’, чтобы заставить CVS забыть эти спецификации и искать головную модификацию файла). |
-c | Скопировать файл модуля, отсортированный, на стандартный выход вместо создания или модификации любых файлов или директориев в вашем рабочем директории. |
-d dir | Создать директорий с именем dir для рабочих файлов вместо использования имени модуля. Без использования `-N’ пути, создаваемые при dir, будут максимально короткими. |
-j tag | Слить изменения, сделанные между результирующей модификацией и модификацией, на которой она базируется (например, если tag ссылается на ветвь, CVS сливает все изменения, сделанные на этой ветви, в ваш рабочий файл). С двумя опциями `-j tag’ CVS сольет изменения между двумя соответствующими модификациями. Это можно использовать для отмены изменений, сделанных между двумя модификациями в вашу рабочую копию или для пересылки изменений между различными ветвями. Вдобавок каждая опция `-j’ может содержать опциональную спецификацию даты, которая при использовании с ветвями может ограничить выбор модификации специфицированной датой. Опциональная дата специфицируется добавлением `:’ к tag. В этом примере вы сливаете только что импортированные файлы, которые могут конфликтовать с локальными изменениями: |
-N | Полезна только вместе с `d dir’. С этой опцией CVS не укорачивает пути модуля в вашем рабочем директории. (В норме CVS максимально укорачивает пути, когда вы явно специфицируете целевой директорий). |
-s | Подобна `-c’, но включает статус всех модулей и сортирует их по строке статуса. |
Оглавление |
Подтверждение изменений (cvs commit)
Если какой-либо файл имеет более старую версию, чем в репозитории, но был изменен, то фиксация не выполняется, а выводится сообщение Up-to-date check failed. Это означает, что сначала необходимо обновить рабочую копию при помощи команды update.
Если все правильно, и не указан ключ -m, то CVS вызывает редактор для ввода записи в журнале, которая впоследствии может быть извлечена командой log.
Опции
Опция -r предназначена для указания, с каким номером версии будут зафиксированы файлы. Т.е. если выполнить то все (даже неизмененные файлы получат номер версии 3.0. При этом версия не может быть меньше текущей, т.е. если существует можификация файлов 2.0, то нельзя сделать cvs commit -r 1.5.
Оглавление |
Выявление различий между модификациями (cvs diff)
Если даны какие-то имена файлов, то только эти файлы будут сравниваться. Если даны какие-то директории, то будут сравниваться все файлы в них.
Статус выхода будет 0, если различие не найдено, 1, если различие найдено, и 2 при ошибке.
Просмотр статуса файлов и пользователей
Созданием файла `$CVSROOT/CVS/ROOT/history’ должно быть задействовано ведение журнала.
ПРЕДУПРЕЖДЕНИЕ: history использует `-f’, `-l’, `-n’, и `-p’ способами, которые конфликтуют с нормальным использованием в CVS.
Опции
Некоторые опции, показанные выше как `-report’, контролируют, какой вид отчета генерируется:
-c | Сообщение на каждый случай использования commit (т.е. на каждый случай модификации репозитория). | ||||||||||||||||||||
-e | Все типы записей; эквивалентно спецификации `-xMACFROGWUT’. | ||||||||||||||||||||
-m module | Сообщение о конкретном модуле module. (Вы можете употребить `-m’ более одного раза в командной строке). | ||||||||||||||||||||
-o | Отчет об оформленно выведенных модулях. | ||||||||||||||||||||
-T | Отчет о всех дескрипторах. | ||||||||||||||||||||
-x type | Извлечь конкретный набор типов записей type из истории CVS. Типы указываются одной буквой, и эти буквы вы можете специфицировать в комбинации. Некоторые команды имеют единственный тип записей:
Один из четырех типов записей может получаться от обновления:
Один из трех типов записей происходит от фиксации:
|
Опции `-flags’ ограничивают или расширяют отчет, не требуя аргументов опции:
-a | Показать данные для всех пользователей (умолчание — показать данные только для пользователя, выполняющего history). |
-l | Показать только последнюю модификацию. |
-w | Показать только записи для модификаций, сделанных из того же рабочего директория, где выполняется history. Опции `-options args’ ограничивают отчет, основанный на аргументе: |
-b str | Показать данные, начиная с записи, содержащей строку str в имени модуля, имени файла или в пути в репозитории. |
-D date | Показать данные, начиная с date. Это несколько отлично от нормального употребления `-D date’, которое выбирает новейшую модификацию, старше, чем date. |
-p repository | Показать данные для конкретного репозитория исходных текстов repository (можно специфицировать несколько опций `-p’ на одной командной строке). |
-r rev | Показать записи, ссылающиеся на модификации, начиная с того момента, когда модификация или дескриптор с именем rev появляется в индивидуальных файлах RCS. В каждом файле RCS ищется эта модификация или дескриптор. |
-t tag | Показать записи с того момента,когда дескриптор tag был в последний раз добавлен к файлу истории. Это отличается от вышеуказанного флага `-r’ тем, что данная опция читает только файл истории, а не все файлы RCS, и работает намного быстрее. |
-u name | Показать записи для пользователя name. |
Оглавление |
Импорт исходных текстов с использованием vendor branches
Аргумент repository дает имя директория (или путь к директорию) в корневом директории CVS для репозиториев; если директорий не существует, то import создает его.
Когда вы используете импорт для обновления исходного текста, который был ранее модифицирован, в вашем репозитории, вас поставят в известность о любых файлах, которые конфликтуют в двух ветвях разработки; используйте `checkout -j’ для улаживания конфликтов, как import рекомендует делать. По умолчанию некоторые имена файлов игнорируются во время исполнения import: имена, ассоциированные с администрацией CVS или с другими системами управления общими исходными текстами; общие имена для файлов заплат, объектных файлов, архивных файлов и файлов резервных копий редактора; и другие имена, которые обычно искусственно создаются некоторыми утилитами. Ныне список игнорируемых по умолчанию файлов включает файлы, соответствующие таким именам: Ели существует файл $CVSROOT/CVSROOT/cvsignore, то любые файлы, чьи имена соответствуют спецификациям в этом файле, будут также игнорироваться.
Если существует файл `$CVSROOT/CVSROOT/cvswrappers’, то любые файлы, чьи имена соответствуют спецификациям в этом файле, будут рассматриваться как пакеты, и будет производиться подходящая фильтрация на файле директории перед его импортом.
Внешний исходный текст сохраняется в ветви RCS первого уровня, по умолчанию — 1.1.1. Обновления — это листья этой ветви; например, файлы от первого импортированного набора исходных текстов будут модификацией 1.1.1.1, файлы от первого импортированного обновления будут модификацией 1.1.1.2 и т.д.
Требуется по крайней мере три аргумента. repository нужен для идентификации набора исходных текстов. vendortag — это дескриптор для всей ветви (например, для 1.1.1). Надо также специфицировать минимум один releasetag для идентификации файлов на листьях, создаваемых при каждом исполнении import.
Опции
-b branch | Специфицировать ветвь первого уровня другую, чем 1.1.1. Если не дан флаг `-b branch’, то модификации всегда делаются на ветви 1.1.1 — даже если дан vendortag, соответствующий другой ветви! В этом случае дескриптор может быть переустановлен на 1.1.1. |
-k subst | Указать желательный режим расширения ключевых слов RCS. Эта установка будет применяться ко всем файлам, созданным во время импорта, но не к файлам ранее существовавшем в репозитории. См. co(1) для полного списка значимых установок `-k’. Если вы оформленно вводите исходные тексты, которые содержат ключевые слова RCS и вы хотите оставить их нетронутыми, то используйте флаг `-ko’ при импорте файлов. Эта установка указывает, что RCS не будет применять расширения кодовых слов при оформленном выводе. Это также полезно для оформленного ввода исполняемых файлов. |
-I name | Специфицировать имена файлов, которые надо игнорировать при импорте. Эту опцию можно использовать повторно. Чтобы избежать игнорирования любых файлов вообще (даже тех, которые игнорируются по умолчанию), специфицируйте `-I!’. name может быть шаблоном имени файла того же типа, который вы специфицируете в файле `.cvsignore’. |
-W spec | Специфицировать имена файлов, которые надо фильтровать при импорте. Эту опцию можно использовать повторно. spec может быть шаблоном имени файла того же типа, который вы можете специфицировать в файле `.cvswrapperers’. |
Оглавление |
Удаление файлов из проекта (cvs remove)
Модули изменяются. Новые файлы добавляются, старые исчезают. И все же вы хотите иметь возможность искать точную копию старых выпусков модуля.
Вот что вы можете сделать для удаления файла из модуля при сохранении возможности поиска старых модификаций:
- Убедитесь, что у вас нет незафиксированных модификаций файла. Вы можете также использовать команды status или update. Если вы удаляете файл без фиксации ваших изменений, то вы, конечно, не сможете отыскать его, как могли бы перед его удалением.
- Удалите файл из вашей рабочей копии модуля. Можно использовать, например, команду rm.
- Используйте cvs remove для указания CVS, что вы действительно хотите удалить его.
- Используйте cvs commit для действительного удаления файла из репозитория.
Когда вы удаляете файл, он пересылается в поддиректорий с именем Attic. CVS не смотрит в этот директорий, когда вы выполняете, например, checkout. Однако если вы ищете некоторую модификацию посредством cvs checkout -r , то вы просматриваете файлы и в Attic’е. Если вы поняли, что удалили файл поошибке, то можно воспользоваться командой add: Если вы еще не выполнили remove, но уже стерли файл можно сделать update:
Опции
-l | Локальность; выполнять только в текущем рабочем директории. |
-R | Фиксировать директории рекурсивно. Это — по умолчанию. |
Оглавление |
Пересылка и переименование файлов
Нормальный путь переименования
Это простейший способ переслать файл, он не подвержен ошибкам и сохраняет историю того, как он сделан. Заметим, что для доступа к истории файла вы должны специфицировать старое или новое имя в зависимости от того, к какой части истории вы имеете доступ. Например, cvs log даст часть журнала вплоть до времени переименования.
Когда зафиксирован, его номера модификаций снова начнутся с 1.0, так что если это вам нежелательно, то используйте опцию `-r rev’ для фиксации.
Пересылка файла истории
Этот метод более опасен, ибо он включает пересылку файлов внутри репозитория. Преимущества:
- журнал изменений и номера модификаций не затрагиваются.
Недостатки:
- Нелегко будет вызвать старые выпуски модуля из репозитория. (Файл будет выглядеть как новый даже в модификациях от времени, перед которым он переименовывался).
- Нет журнальной информации о том, когда файл переименовывался.
- Могут случиться неприятности, если кто-то получит доступ к файлу во время вашей пересылки. Убедитесь, что никто не выполняет команды CVS во время этой пересылки.
(c) l999 AAZ
Источник