В обычных условиях CVS работает только с обычными файлами. Каждый файл в проекте считается устойчивым: его можно открыть, прочесть и закрыть, и делать это несколько раз. CVS также игнорирует права доступа и владельцев файлов, предоставляя разработчику решать такие вопросы во время инсталляции. Другими словами, нельзя "поместить" устройство в репозиторий; если устройство не может быть открыто, CVS откажется обрабатывать его. Файлы также могут потерять права доступа и владельцев во время транзакций в репозитории.
Если в репозитории установлена переменная
PreservePermissions
(see section Файл конфигурации CVSROOT/config), то CVS
сохранит в репозитории такие характеристики файлов:
Использование опции PreservePermissions
влияет на
поведение CVS в нескольких местах. Во-первых, некоторые
новые операции, поддерживаемые CVS не доступны всем
пользователям. В частности, владельцы файла и характеристики
специальных файлов могут изменяться только суперпользователем.
Таким образом, когда переменная конфигурации
PreservePermissions
установлена, пользователи должны стать
пользователем root
, чтобы выполнять операции с CVS.
Когда используется PreservePermission
, некоторые операции
CVS (такие, как `cvs status'), не смогут определить
структуру жестких ссылок файла, и будут выдавать предупреждения о
несовпадающих жестких ссылках. Причиной этого является то, что
внутренние структуры CVS не обеспечивают простого способа
собрать всю информацию о жестких ссылках, поэтому они проверяют
конфликты файлов, пользуясь неточными данными.
Более тонким различием является то, что CVS считает, что файл изменился, только если изменилось его содержимое (особенно если время модификации рабочего файла не совпадает с временем модификации файла в репозитории). Таким образом, если у файла изменились только права доступа, владелец, или основной и вспомогательный номера устройства, то CVS не заметит этого. Для того, чтобы принудительно поместить такое изменение в репозиторий, используйте ключ `-f' команды `cvs commit'. Это также означает, что если права доступа файла изменились, а файл в репозитории новее, чем рабочая копия, то выполнение `cvs update' просто изменит права доступа на рабочей копии.
Изменение жестких ссылок в репозитории CVS является особенно
тонкой процедурой. Предположим, что файл `foo' был связан с
файлом `old', а затем связан с файлом `new'. Вы можете
попасть в необычную ситуацию, когда несмотря на то, что у
`foo', `old' и `new' изменилось количество жестких
ссылок, только файлы `foo' и `new' были изменены,
поэтому `old' не является кандидатом на фиксирование в
репозитории. Таким образом можно прийти к результатам,
несоответствующим действительности. Если необходимо хранить в
репозитории жесткие ссылки, мы рекомендуем применять команду
touch
ко всем файлам, чьи ссылки или статус изменились со
времени последней фиксации. В действительности, было бы
правильным выполнять touch *
перед каждой фиксацией, если
в каталоге находится сложная система ссылок на файлы.
Стоит заметить, что только обычные файлы могут быть объединены, по причинам, которые, надеемся, очевидны. Если `cvs update' или `cvs checkout -j' попытаются объединить символическую ссылку с обычным файлом, или два файла устройств друг с другом, то CVS сообщит о конфликте и откажется производить объединение. В то же самое время `cvs diff' не сообщит о различиях между этими файлами, потому что с файлами, не содержащими текста, нельзя совершать текстуальные сравнен╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩