Содержимое каталогов меняется. Добавляются новые файлы, исчезают старые. Однако же, вам хотелось бы извлекать точные копии старых версий вашего проекта.
Вот как можно удалить файл, сохранив доступ к его старым ревизиям:
Убедитесь, что у вас неизмененная версия этого файла. См. раздел Просмотр изменений, там описан один из способов убедиться в этом. Можно также использовать команды status или update. Если вы удалите файл без предварительной фиксации изменений, вы, конечно же, не сможете извлечь этот файл в том виде, в котором он находился перед удалением.
Удалите файл из рабочей копии каталога. Например, можно использовать программу rm.
Выполните cvs remove имя-файла, чтобы сообщить CVS, что вы действительно хотите удалить этот файл.
Выполните cvs commit имя-файла, чтобы зафиксировать удаление файла в репозитории.
Когда вы фиксируете удаление файла, CVS запоминает, что этого файла более не существует. Впрочем, он может существовать на одних ветках и не существовать на других, или же можно впоследствии добавить другой файл с тем же самым именем. CVS корректно создаст или не станет создавать файл, основываясь на ключах командной строки -r или -D, заданных в командах checkout или update.
Команда: cvs remove [ключи] файлы ...
Помещает файлы в список на удаление из репозитория (для того, чтобы эта команда сработала, нужно, чтобы файлы были удалены из рабочего каталога). Эта команда не удаляет файлы из репозитория, пока вы не зафиксируете удаление. Полный список ключей находится в разделе ???.
Вот пример удаления нескольких файлов:
$ cd test $ rm *.c $ cvs remove cvs remove: Removing . cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m “Removed unneeded files” cvs commit: Examining . cvs commit: Committing .
Для удобства можно удалять файлы и одновременно делать cvs remove, используя ключ командной строки -f. Например, вышеприведенный пример можно переписать так:
$ cd test $ cvs remove -f *.c cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m “Removed unneeded files” cvs commit: Examining . cvs commit: Committing .
Если вы выполните команду remove, а затем перемените свое решение, еще не зафиксировав удаление, то команду remove можно отменить с помощью команды add.
$ ls CVS ja.h oj.c $ rm oj.c $ cvs remove oj.c cvs remove: scheduling oj.c for removal cvs remove: use 'cvs commit' to remove this file permanently $ cvs add oj.c U oj.c cvs add: oj.c, version 1.1.1.1, resurrected
Если вы осознаете свою ошибку перед выполнением команды remove, можно использовать update, чтобы воскресить файлы:
$ rm oj.c $ cvs update oj.c cvs update: warning: oj.c was lost U oj.c
Когда вы удаляете файл, он удаляется только с той ветки, на которой вы работаете (см. раздел Глава 8. Создание и слияние ветвей). Позже можно слить удаления на другую ветку, если захотите (см. раздел “При слиянии можно добавлять и удалять файлы”).