Подтвердить что ты не робот

Удалить пустую директорию из CVS?

Я не совсем уверен, как это произошло, но каким-то образом в моем репозитории оказалась полностью пустая иерархия каталогов:

com/
com/companyname/
com/companyname/blah/
com/sun/
com/sun/java/
com/sun/java/jax_rpc_ri/

Я думаю, что произошло то, что у этих каталогов были файлы в них, но затем разработчик понял, что он/она не должен был проверять их в первую очередь, поскольку они являются побочными продуктами процесса сборки, поэтому он/она удалила файлы, но как-то пустые каталоги остаются в репозитории как древние реликвии.

Как я могу удалить это из CVS? Единственные результаты, которые я, кажется, могу найти в google, говорят, что не должно быть необходимости удалять пустые каталоги, поскольку CVS не будет их содержать в первую очередь и что параметры -P (чернослив) для cvs update должен удалить их из рабочего каталога - это нулевая справка, если у вас на самом деле есть пустые каталоги в вашем репозитории.

A cvs remove и cvs commit, похоже, не заботятся об этой ситуации:

$ cvs remove -Rf com
cvs remove: Removing com
cvs remove: Removing com/companyname
cvs remove: Removing com/companyname/blah
cvs remove: Removing com/sun
cvs remove: Removing com/sun/java
cvs remove: Removing com/sun/java/jax_rpc_ri
$ cvs commit com
cvs commit: Examining com
cvs commit: Examining com/companyname
cvs commit: Examining com/companyname/blah
cvs commit: Examining com/sun
cvs commit: Examining com/sun/java
cvs commit: Examining com/sun/java/jax_rpc_ri
$ ls -l com
total 24
drwxrwxr-x  2 matt matt 4096 Oct 15 14:38 CVS
drwxrwxr-x  9 matt matt 4096 Oct 15 14:38 companyname
drwxrwxr-x  4 matt matt 4096 Oct 15 14:38 sun

Он все еще там!

Есть ли у SVN это странное поведение?

4b9b3361

Ответ 1

AFAIK протокол CVS не позволяет удалять каталоги. Вы должны перейти на консоль сервера и удалить их из реального физического репозитория.


http://www.network-theory.co.uk/docs/cvsmanual/Removingdirectories.html

Вы не удаляете сам каталог; нет способа сделать это.

Ответ 2

Проверка и обновление CVS всегда будут проверять пустые каталоги; что именно так создается CVS. Сделайте обновление с помощью "-P" - "prune" - для удаления пустых каталогов:

cvs update -dP

(Добавление "-d" обновит новые каталоги, появившиеся со времени вашего последнего обновления, иначе CVS проигнорирует их.)

Ответ 3

Просто сделал

  • rm -rvf/localCopy/project/emptyDirectory
  • edit/localCopy/project/CVS/Записи, удалить строку D/emptyDirectory////, сохранить файл
  • rmdir -v/CVSROOT/project/emptyDirectory

чтобы избавиться от emptyDirectory в проекте. Признать, что не законно вмешиваться в внутренние данные CVS, но, похоже, сработал (cvs version 1.12.13).

Ответ 4

У CVS есть ряд недостатков дизайна, никогда неспособных избавиться от каталога без потери истории. Сложность переименования файлов и каталогов без потери истории - это другое.

Рассмотрим выпуск Subversion. cvs2svn делает очень хорошую работу, конвертируя репозитории, включая все ветки и теги. Наборы команд CVS и SVN очень похожи и требуют минимальной настройки. (И чтобы предотвратить это, "каким управлением версиями вы должны использовать", когда вы используете SVN, вы можете перейти на любое количество более совершенных систем управления версиями, таких как git или SVK.

Ответ 5

Это сработало для меня. В основном, когда вы делаете

rmdir -v/CVSROOT/project/emptyDirectory # Мы удаляем каталог из каталога репозитория CVS.

Если у вас есть доступ к входам в unix-сервер репозитория, вы можете перемещаться по этому пути и удалять каталог, или поднимать ту же самую проблему с командой unix.

Ответ 6

cvs имеет тенденцию работать над двухфазным подходом к каталогам, почему существует опция -P для многих команд cvs для "Обрезать пустые каталоги".

Когда это произошло, например, хотите переименовать каталог, который я только что добавил, я удаляю каталог, удаляю запись для каталога в файле CVS/Entries, это будет строка с надписью "D".

Задание выполнено.

Если я сделал, я убеждаюсь, что моя текущая рабочая область, содержащая пустые директории, все проверены. Затем я удаляю часть рабочей области, к которой я добавил каталоги.

Например, в

~/Sandbox/my_project/some_stuff_i_want
~/Sandbox/my_project/empty_dir_1
~/Sandbox/my_project/other_stuff_i_want

Я уверен, что все обновлено в обоих каталогах, содержащих материалы, которые я хочу сохранить. Затем я удаляю my_project из моей песочницы.

Затем я удаляю пустые каталоги из самого репозитория.

Возвращение и проверка той же рабочей области, например. my_project даст мне рабочую область без пустых каналов.

Или просто оставьте все как есть и используйте параметр -P, чтобы заставить CVS проверить все (или обновить все), а затем вырезать пустые директории.

НТН

веселит,

Роб

Ответ 7

Вы не можете удалить каталог из своей рабочей области, вам нужно удалить его с перехода на сервер, где хранится реальный репозиторий. но вы можете удалять файлы из каталога командой cvs remove.