go to the first, previous, next, last section, table of contents.
добавление, удаление и переименование файлов и каталоговв процессе разработки проекта часто требуется добавлять, удалять или переименовывать файлы и каталоги. исходя из общих принципов, требуется, чтобы cvs запоминала факт совершения такого действия, вместо того, чтобы совершать необратимое изменение, точно так же, как она обращается с изменениями файлов. точные механизмы, действующие в этих случаях, зависят от конкретной ситуации. добавление файлов в каталогдля того, чтобы добавить новый файл в каталог, совершите следующие шаги:
можно также использовать команду
в отличие от большинства других команд, команда $ cd foo $ cvs add bar
например, нижеследующие команды добавляют файл `backend.c' в репозиторий: $ cvs add backend.c $ cvs commit -m "early version. not yet compilable." backend.c когда вы добавляете файл, он добавляется только на ту ветку, над которой вы работаете (see section создание ветвей и слияние). вы можете позднее поместить добавления на другую ветку, если захотите (see section при слиянии можно добавлять и удалять файлы). удаление файловсодержимое каталогов меняется. добавляются новые файлы, исчезают старые. однако же, вам хотелось бы извлекать точные копии старых версий вашего проекта. вот как можно удалить файл, сохранив доступ к его старым ревизиям:
когда вы фиксируете удаление файла, cvs запоминает, что
этого файла более не существует. впрочем, он может существовать
на одних ветках и не существовать на других, или же можно
впоследствии добавить другой файл с тем же самым именем.
cvs корректно создаст или не станет создавать файл,
основываясь на ключах командной строки `-r' или `-d',
заданных в командах
вот пример удаления нескольких файлов: $ 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 .
для удобства можно удалять файлы и одновременно делать $ 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 .
если вы выполните команду $ 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
если вы осознаете свою ошибку перед выполнением команды
$ rm oj.c $ cvs update oj.c cvs update: warning: oj.c was lost u oj.c когда вы удаляете файл, он удаляется только с той ветки, на которой вы работаете (see section создание ветвей и слияние). позже можно слить удаления на другую ветку, если захотите (see section при слиянии можно добавлять и удалять файлы). удаление каталоговв принципе удаление каталогов в чем-то подобно удалению файлов --- вы не хотите, чтобы каталог существовал в текущем рабочем каталоге, но вы хотите также, чтобы можно было извлекать старые версии проекта, в которых еще существовал каталог.
можно удалить каталог, удалив все файлы в нем. нет способа
удалить сам каталог. вместо этого вы задаете командам
заметьте, что при использовании ключей `-r' или `-d' с
командами перемещение и переименование файловперемещение файлов в другой каталог или переименование их несложно, но некоторые аспекты могут быть неочевидными. перемещение и переименование каталогов еще сложнее. see section перемещение и переименование каталогов.) в нижеприведенных примерах предполагается, что файл `old' переименовывается в `new'. обычный способ переименованияобычным способом перемещения файла является копирование old в new, а затем выполнение команд cvs для удаления файла old из репозитория и добавления туда файла new. $ mv old new $ cvs remove old $ cvs add new $ cvs commit -m "old переименован в new" old new
это самый простой способ переместить файл, он не подвержен
ошибкам, и сохраняет историю совершенных действий. заметьте, что
для доступа к истории файла нужно указать старое или новое имя, в
зависимости от периода истории, к которому вы обращаетесь.
например,
когда new фиксируется, нумерация его ревизий начнется с
нуля, обычно с 1.1, поэтому если это вам не нравится, используйте
ключ командной строки `-r номер' команды
перемещение файла с ревизиямиэтот метод более опасен, потому что требует перемещения файлов в репозитории. прочтите всю главу перед попытками применить этот метод! $ cd $cvsroot/dir $ mv old,v new,v преимущества:
недостатки:
копирование файла с ревизиямиэтот способ также требует прямых изменений репозитория. он безопасен, но не без подводных камней. # копировать rcs-файл в репозитории $ cd $cvsroot/dir $ cp old,v new,v # удалить старый файл $ cd ~/dir $ rm old $ cvs remove old $ cvs commit old # удалить все метки из new $ cvs update new $ cvs log new # запомнить все метки, не являющиеся именами веток $ cvs tag -d tag1 new $ cvs tag -d tag2 new ... удалив метки, вы сможете извлекать старые ревизии преимущества:
недостатки:
перемещение и переименование каталоговобычный способ переименовать или переместить каталог --- переименовать или переместить каждый файл в нем, как описано в section обычный способ переименования. затем следует извлечь их заново, используя ключ командной строки `-p', как описано в section удаление каталогов. если вам действительно нужно возиться с репозиторием, чтобы переименовать или удалить каталог в репозитории, вы можете сделать это так:
если кто-то не удалил свою рабочую копию, команды cvs будут отказываться работать, пока он не удалит каталог, которого больше не существует в репозитории. почти всегда гораздо лучшим способом будет переместить файлы в каталоге, вместо того, чтобы перемещать каталог, потому что иначе вы, скорее всего, не сможете корректно извлекать старые версии вашего проекта, так как они, вероятно, зависят от имен каталогов. go to the first, previous, next, last section, table of contents. |